为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
holdtom 2019-08-23 09:36:07
如果输入字母而不是数字,为什么会出现无限循环?我正在编写这个代码用于家庭作业(刚开始使用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;}
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

这是怎么回事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);


查看完整回答
反对 回复 2019-08-23
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

输入字母时,将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;
    }

编辑:

感谢Lightness指出这一点。你也应该初始化num1

int num1=-1, num2, total;


查看完整回答
反对 回复 2019-08-23
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您可以使用“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'


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 717 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信