当我输入像63453462这样的随机数时,它会响应"无效数字"但是在一个无限循环中但是如果我输入一个像2,000,002这样的数字它只是说没有循环的无效数字。当有人插入像2145345665465这样的随机数时,我需要帮助而不是无限循环。
#include <iostream>
using namespace std;
int main ()
{
int sum , input , number;
cout << "Enter any positive integer that is less than or " ;
cout << "equal to 2,000,000 to determine if it is divisible by 11.";
cout << endl;
cout << "If the number is greater than 99, we use Dodgsons's rule";
cout << endl;
cout << "which determines if it is a factor or not.\n";
cout << endl;
cin >> input;
while ((input < 1) || ( input > 2000000 ))
{
cout << "Invalid number detected, please enter a positive integer.\n";
cin >> input;
}
number = input;
while ((input>=100) && (input < 2000000))
{
sum = input % 10;
input = input /10 - sum;
cout << input << endl;
}
if (input % 11 == 0)
cout << "the number is divisible by 11." << endl;
else
cout << "the number is not divisible by 11." << endl;
system ("Pause");
return 0;
}
答案 0 :(得分:0)
while ((input < 1) || ( input > 2000000 ))
{
cout << "Invalid number detected, please enter a positive integer.\n";
cin >> input;
cin.clear();
}
cin.clear()
将清除导致无限循环的任何先前状态。
答案 1 :(得分:0)
您需要正确检查输入操作是否成功。如果您输入的内容无法解析为整数,或者某些值超过INT_MAX
或小于INT_MIN
,则在
cin >> input
流std::cin
将进入失败状态,这意味着failbit
已设置。之后,除非您处理它,否则每个后续输入操作也将失败。
这里常用的方法是清除输入缓冲区(输入无法处理),然后再试一次:
while (not (cin >> input) or not is_valid(input)) {
cout << "Invalid input, try again" << endl;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin.clear();
}
首先执行输入操作(cin >> input
)并检查它是否not
成功,并且只有当它不成立时(即输入操作成功)才检查输入是否为{{1} }使用某些not
函数有效。在这种情况下,会打印一个错误,从流中删除包括下一个换行符在内的所有字符,并清除is_valid
,以便获得有效输入的新内容。
注意,有两个相同类型的变量并且正在执行
failbit
在这里没用,您可以直接读入number = input;
(更恰当地命名)并将变量number
全部放在一起。