如果输入字符串作为输入,则以下函数将导致无限循环。
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;
}
}
如果输入字符串作为输入,则以下函数将导致无限循环。 输出:
再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,
最佳答案
您需要做两件事:
1)清除状态,如下所示:cin.clear(istream::goodbit);
2)清除状态后,一次跳过一个字符,因为您不知道下一个数字从哪里开始:
char c;
cin >> c;