带输入的C ++无限循环

时间:2012-02-15 07:15:53

标签: c++ loops while-loop infinite-loop

我有一个从终端获取输入的C ++程序,由于某种原因,这会产生无限循环:

double getSideLength()
{
    cout << "Enter a side: "
double side;
cin >> side; cin.ignore( 80, '\n' );
while (side <= 0){
    cout << "Please enter a valid side. Try again: ";
    cin >> side; cin.ignore(80, '\n');
}
return side;

这会产生输出:

Enter a side: invalid
Please enter a valid side. Try again:
Please enter a valid side. Try again:
Please enter a valid side. Try again:
   .... and so on. "invalid" is the only input the user made

4 个答案:

答案 0 :(得分:2)

operator>> documentation流中所述,如果“获得的输入不能被解释为适当类型的元素”,则获取其failbit。如果您输入错误的号码,就会发生所以你必须在下一次输入之前清除()cin。这是代码:

double getSideLength()
{
        double side;
        cout << "Enter a side: ";
        cin >> side;
        if (!cin)
             cin.clear();
        cin.ignore( 80, '\n' );
        while (side <= 0){
                cout << "Please enter a valid side. Try again: ";
                cin >> side;
                if (!cin)
                    cin.clear();
                cin.ignore( 80, '\n' );
        }
        return side;
}

答案 1 :(得分:1)

这应解决问题。使用!(cin >> side)将确保我们从cin获得正确的类型。

double getSideLength()
{
    cout << "Enter a side: " << std::endl;
    double side = -1;
    while ( ! (cin >> side) and side <= 0)
    {
        cout << "Please enter a valid side. Try again: ";
        cin.clear();
        cin.ignore(1000, '\n');
    }

    return side;
}

答案 2 :(得分:0)

double getSideLength()
{
    double side;
 getinput:
    cout << "Enter a side: "
    cin >> side; cin.ignore( 80, '\n' );
    if(side <= 0)
    {
        cout << "Please enter a valid side. Try again: "
        goto getinput;
    }
    return side;
}

尝试这个我希望这对你有帮助

答案 3 :(得分:0)

cin似乎有很多错综复杂的错误,一般来说,正如here所解释的那样,您可能更喜欢使用getline,然后使用atoi

此外,还讨论了这个无限循环问题here。如果您想使用cin,可以使用输入到字符串变量中,然后使用atoi将其转换为整数,如this post中所示。