cin在读取非数值时无限循环
cin infinite loop when reading in a non-numeric value
我在一个程序中有一个奇怪的行为,我花了很长时间试图推断原因。这是一个毫无意义的无限循环。(在怀疑的情况下)测试这些代码行,我得到了同样的结果。每次我输入一个非数字值,比如一个符号,程序都会运行一个打印零的无限循环,我想这就是cout表示输入错误值的方式。我想知道cin为什么会有这种奇怪的行为,打印所有的零,而不是在发现错误读数时停止。
#include <iostream>
using namespace std;
int main()
{
int n = 0;
while(n >= 0) {
cin >> n;
cout << n << endl;
}
return 0;
}
程序运行了一个打印零的无限循环,我想
cout
就是这样表示输入的错误值的。
这并不完全正确:当您向cin
请求int
,但没有int
时,您不会得到任何值,但无效输入仍保留在缓冲区中。当您在循环的下一次迭代中再次请求int
时,同样的事情再次发生,并且没有取得任何进展:坏数据仍保留在缓冲区中。
这就是为什么你会得到一个无限循环。要解决这个问题,您需要添加一些代码来从输入缓冲区中删除坏数据。例如,您可以将其读取为字符串,并忽略输入:
int n = 0;
while(n <= 0) {
cin >> n;
if (!cin.good()) {
cin.clear();
string ignore;
cin >> ignore;
continue;
}
cout << n << endl;
}
演示。
您需要"吃掉"非数字输入,即
#include <iostream>
using namespace std;
int main()
{
int n = 0;
while(n >= 0) {
cin >> n;
if (!cin) {
char c;
cin >> c;
} else {
cout << n << endl;
}
}
return 0;
}
相关文章:
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 从文件 C++ 读取时的无限循环
- C++:从文件中读取x y数据会产生无限循环吗
- 在控制台上输出我从文件中读取的整数,将程序插入无限循环
- CPP 在读取结构数据时无限循环错误?
- 当要读取的文件已打开时,文件读取进入无限循环
- 将结构从二进制文件读取到链表,导致无限循环
- 为什么这段代码最终会进入一个无限循环,读取std::cin
- C++ 无限循环读取文件创建重定向命令输出
- 在 c++ 中从文件读取时会发生无限循环
- 使用 cin::fail() 从 stdin 进行无限循环读取
- 读取输入文件时的无限循环
- cin在读取非数值时无限循环
- 读取 stdio.h 时的无限循环
- 读取文件时进入无限循环
- 从文件中读取信息后,会发生一个无限循环
- c++ -读取文件字符时的无限循环
- 从文件读取导致无限循环的问题
- 从文件中读取整数时的无限循环
- 当check为eof时,使用getline读取文本文件会导致无限循环