输入字符时的无限循环
Infinite Loop when a character is entered
我试图限制用户只能输入'1'或'2'。
int ch;
do
{
cout<<"Enter: n";
cin>>ch;
switch(ch)
{
case 1:
cout<<"1";
break;
case 2:
cout<<"2";
break;
default:
cout<<"Retryn";
}
}while(ch != 1 && ch != 2);
当我输入除1或2以外的任何数字时,程序运行正常,要求用户重试,但是当我输入一个字符时,程序进入'重试'和'输入'的无限循环。
这是因为当您输入非数字字符时,输入操作符无法将其解析为整数,并且将该字符留在缓冲区中。所以下一次循环的迭代,它又读取了完全相同的字符。如此反复。
克服这个问题的最简单的方法是简单地要求流忽略该行的其余部分:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); // skip bad input
也有其他方法,如将整行读入字符串,将该字符串放入输入字符串流中,然后从该流中读取整数。不过还有一点工作要做。这种方式意味着你不必检查std::cin
上的输入失败,尽管你必须用上面的方法检查。
完整的代码可能看起来像
int n;
do
{
if (!std::cin >> n)
{
std::cout << "Only numbers accepted. Please try again.n";
// Skip bad input
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
std::cin.clear(); // Clear error flags
}
// switch ...
} while (...);
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 当想要以类似的字符终止时,获得无限循环在C 中
- C++ 输入字符而不是 int 会导致无限循环.如何检查错误的输入
- 为什么我的程序在输入字符时有一个无限循环
- 无限 while 循环 - 字符关闭不起作用C++
- c++ -读取文件字符时的无限循环
- 输入字符时的无限循环
- 当用户输入一个字符而不是浮点和整数时,如何避免无限循环
- 为什么这会导致字符而不是双精度的无限循环