use*_*563 15 c++ infinite-loop
我正在编写这个代码用于家庭作业(刚开始使用C++,所以请放轻松).我们刚刚开始的同时,今天和今天的循环.该程序运行正常,但如果您在程序要求输入整数时输入一个字母,它会无限循环.到底是怎么回事?(以下代码)***编辑:为了澄清,循环的部分是:"您输入的数字是负数.请输入正数以继续." 但是用户没有机会输入另一个号码.它只是继续打印这个.
    #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;
}
Ser*_*gey 13
这是怎么回事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);
当您输入一个字母时, 的错误状态cin就会被设置,并且在您调用 之前将无法进行任何进一步的输入cin.clear()。因此,该语句cin >> num1不会改变 的值num1并且您将永远循环。
尝试这个:
    while (num1 < 0)
    {
        cout << "The number you entered is negative.\nPlease enter a positive number to continue.\n";
        cin.clear();
        cin >> num1;
    }
编辑:
感谢莱特尼斯指出了这一点。num1你也应该初始化:
int num1=-1, num2, total;
| 归档时间: | 
 | 
| 查看次数: | 26860 次 | 
| 最近记录: |