如果我input一个字母而不是一个数字,为​​什么我会得到一个无限循环?

我正在编写一个家庭作业的代码(刚刚启动C ++,所以请轻松)。 我们刚刚开始,今天做,做和循环。 该程序运行正常,但如果您input一个字母,当程序要求一个整数,它无限循环。 到底是怎么回事? (下面的代码)***编辑:澄清,循环的部分是:“您input的数字是负数,请input一个正数继续。 但用户没有机会input另一个号码。 它只是不断打印这个。

#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; } 

这是basic_istream工作原理。 在你的情况下,当cin >> num1得到错误的input – failbit被设置, cin不被清除。 所以下一次这将是相同的错误的input。 要正确处理这个问题,你可以添加检查正确的input和清除&忽略cin在错误的input的情况下。 例如:

  #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); 

当你input一个字母时, cin的错误状态被设置,在你调用cin.clear()之前,不会有任何进一步的input。 因此,语句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; 

这个答案应该能解决你的问题。 基本上你试图从stream中读取一个字符,并且不能将其parsing为一个int,所以stream保持错误状态。

你应该检查一个错误,清除它并作出相应的反应。

你可以使用“char”数据types作为用户的input,然后使用“static_cast(”variable name“);

 char input; int choose; cin >> input; choose = static_cast<int>(choose) - 48;///then use 'if' statement with the variable 'choose'