gpt4 book ai didi

c++ - 使用 C++ IO istream 对象读取导致无限循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:13 24 4
gpt4 key购买 nike

如果输入字符串作为输入,则以下函数会导致无限循环。

istream & inputFunc(istream &is)
{
int ival;
// read cin and test only for EOF; loop is executed even if there are other IO failures
while (cin >> ival, !cin.eof()) {
if (cin.bad()) // input stream is corrupted; bail out
throw runtime_error("IO stream corrupted");
if (cin.fail()) { // bad input
cerr<< "bad data, try again"; // warn the user
cin.clear(istream::failbit); // reset the stream
continue; // get next input
}
// ok to process ival
cout << "you entered: " << ival << endl;
}



}

如果输入字符串作为输入,则以下函数会导致无限循环。

输出:

再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据, try again bad data, try again bad data, try again bad data, try again bad data, try again bad data, try again bad data, try again bad data, try again bad data, try again bad data,

最佳答案

你需要做两件事:

1) 清除状态如下:cin.clear(istream::goodbit);

2) 清除状态后一次跳过一个字符,因为你不知道下一个数字从哪里开始:

 char c;
cin >> c;

关于c++ - 使用 C++ IO istream 对象读取导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1957495/

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