#include<iostream>
#include<limits>
int main()
{
int m;
std::cin >> m;
while (std::cin.fail() || m <= 0) {
std::cin.clear();
std::cin >> m;
}
return 0;
}
上面的代码应该会提示输入,直到输入正整数。但即使输入正整数后,它仍然会提示输入。 例如,可以说我有输入作为使用cin验证输入
abc
c4
-3
1
2
.
.
因此,在原则上我进入1
的那一刻,执行应转出循环。但它不断提示输入,看起来像一个无限循环。
环视一段时间后,我修改它作为
cin >> m;
while (cin.fail() || m <= 0) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cin >> m;
}
如所希望的,在进入正数终止循环。 我没有明白。为什么新行字符卡在输入缓冲区中? 假设我有这个
int a , b;
cin >> a;
cin >> b;
当我输入的是
1
2
它正确地设置a
到1
和b
到2
,而不是设置b
到\n
。 为什么两种情况下的行为不同?
'b'如何设置为'\ n'? 'b'是一个整数。 –
@KolyolyHorvath变量已被定义。对不起,我忘了 – ibrahim5253
不要“忘记”它。请提供清楚,简洁和精确的[最小测试用例](http://stackoverflow.com/help/mcve),以表明问题**,以便我们不会猜测/假定您可能做或可能没有做过的事情。 –