15

我正在为家庭作业编写此代码(刚开始 C++,所以请放轻松)。我们今天刚刚开始了 while、do-while 和 for 循环。该程序运行良好,只是如果您在程序要求整数时输入一个字母,它将无限循环。到底是怎么回事?(下面的代码)***编辑:澄清一下,循环的部分是:“您输入的数字是负数。请输入正数以继续。” 但是用户没有机会输入另一个号码。它只是继续打印这个。

    #include <iostream>
using namespace std;

int main ( )
{
    //define variables
    int num1, num2, total;
    char answer1;

    do
    {
        //user enters a number
        cout << "\nPlease enter a positive number and press Enter: \n";
        cin >> num1;

        //check that the given num1 value is positive
        while (num1 < 0)
        {
            cout << "The number you entered is negative.\nPlease enter a positive number to continue.\n";
            cin >> num1;
        }

        cout << endl;

        //add the sum of 1 through num1 value
        num2 = 1;
        total = 0;
        while (num1 >= num2)
        {
            total = total + num2;
            num2 ++;
        }

        //tell the user the sum
        cout << "The total of all the integers\nfrom 1 to " << num1 << " is: \n";
        cout << total;

        //ask if the user wants to try again
        cout << "\n\nWould you like to try again with a new number?\nEnter y for yes or n for no.\n";
        cin >> answer1;
    } while (answer1 == 'y');   

    cout << endl;
    return 0;
}
4

4 回答 4

14

这是如何basic_istream工作的。在您的情况下,当cin >> num1输入错误时 -failbit已设置cin且未清除。所以下次它会是同样的错误输入。要正确处理此问题,您可以添加检查输入是否正确,并cin在输入错误的情况下清除并忽略。例如:

    #include<limits>

    //user enters a number
    cout << "\nPlease enter a positive number and press Enter: \n";
    do {    
        while(!(cin >> num1)) {
            cout << "Incorrect input. Please try again.\n";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n";
    } while(num1 < 0);
于 2013-10-22T15:07:21.717 回答
1

这个答案应该可以解决您的问题。基本上,您正在尝试从流中读取一个字符,并且无法将其解析为 int,因此流处于错误状态。

您应该检查错误,清除它并做出相应的反应。

于 2013-10-22T15:03:11.737 回答
1

When you enter a letter, the error state of cin is set and there won't be any further input possible before you call cin.clear(). In consequence, the statement cin >> num1 will not change the value of num1 and you loop forever.

Try this:

    while (num1 < 0)
    {
        cout << "The number you entered is negative.\nPlease enter a positive number to continue.\n";
        cin.clear();
        cin >> num1;
    }

EDIT:

Thanks to Lightness for pointing this out. You should initialize num1 too:

int num1=-1, num2, total;
于 2013-10-22T14:59:02.687 回答
0

您可以使用“char”数据类型作为用户的输入,然后使用“static_cast("variable name");

char input;
int choose;
cin >> input;
choose = static_cast<int>(choose) - 48;///then use 'if' statement with the variable 'choose'
于 2015-04-01T23:19:28.100 回答