gpt4 book ai didi

c++ - 读入非数值时的 cin 无限循环

转载 作者:行者123 更新时间:2023-11-30 03:56:38 26 4
gpt4 key购买 nike

我在一个程序中有一个奇怪的行为,我花了很长时间试图推断原因。这是一个毫无意义的无限循环。测试这些代码行(怀疑)我得到了相同的结果。每次我输入一个非数字值这样的符号时,程序都会运行一个无限循环打印零,我猜这就是 cout 如何表示输入的错误值。我想知道为什么 cin 会出现这种奇怪的行为,打印所有这些零而不是在发现错误读数时停止。

#include <iostream>

using namespace std;

int main()
{
int n = 0;
while(n >= 0) {
cin >> n;
cout << n << endl;
}
return 0;
}

最佳答案

the program runs through an infinite loop printing zeros, which i guess is how cout represents the wrong value entered.

这不太正确:当您向 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;
}

Demo.

关于c++ - 读入非数值时的 cin 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28380544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com