如果输入字母而不是数字,为什么会出现无限循环?

如果输入字母而不是数字,为什么会出现无限循环?

我正在编写这个代码用于家庭作业(刚开始使用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;}


holdtom
浏览 718回答 3
3回答

吃鸡游戏

这是怎么回事basic_istream。在你cin >> num1输入错误的情况下-&nbsp;failbit设置并且cin不被清除。所以下次它将是相同的错误输入。要正确处理此问题,您可以添加检查输入正确,并cin在输入错误时清除和忽略。例如:&nbsp;&nbsp;&nbsp;&nbsp;#include<limits> &nbsp;&nbsp;&nbsp;&nbsp;//user&nbsp;enters&nbsp;a&nbsp;number &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"\nPlease&nbsp;enter&nbsp;a&nbsp;positive&nbsp;number&nbsp;and&nbsp;press&nbsp;Enter:&nbsp;\n"; &nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!(cin&nbsp;>>&nbsp;num1))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"Incorrect&nbsp;input.&nbsp;Please&nbsp;try&nbsp;again.\n"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin.clear(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin.ignore(numeric_limits<streamsize>::max(),&nbsp;'\n'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(num1&nbsp;<&nbsp;0)&nbsp;cout&nbsp;<<&nbsp;"The&nbsp;number&nbsp;you&nbsp;entered&nbsp;is&nbsp;negative.&nbsp;Please&nbsp;enter&nbsp;a&nbsp;positive&nbsp;number&nbsp;to&nbsp;continue.\n"; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while(num1&nbsp;<&nbsp;0);

肥皂起泡泡

输入字母时,将cin设置错误状态,并且在您呼叫之前不会再进行任何输入cin.clear()。因此,该语句cin >> num1不会改变值,num1并且您将永远循环。试试这个:&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(num1&nbsp;<&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;"The&nbsp;number&nbsp;you&nbsp;entered&nbsp;is&nbsp;negative.\nPlease&nbsp;enter&nbsp;a&nbsp;positive&nbsp;number&nbsp;to&nbsp;continue.\n"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin.clear(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;num1; &nbsp;&nbsp;&nbsp;&nbsp;}编辑:感谢Lightness指出这一点。你也应该初始化num1:int&nbsp;num1=-1,&nbsp;num2,&nbsp;total;

尚方宝剑之说

您可以使用“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'
打开App,查看更多内容
随时随地看视频慕课网APP