【发布时间】:2016-08-03 13:14:18
【问题描述】:
首先让我告诉你我的来源。
#include <iostream>
#include <limits>
using namespace std;
int main() {
int n;
while (true) {
cout << "Type >> ";
cin >> n;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Not a number" << endl;
continue;
}
if (n % 2)
cout << "odd";
else
cout << "even";
cout << endl;
}
return 0;
}
好吧,这段代码可以毫无问题地运行。但是,如果我在 cin.clear() 和 cin.ignore() 之间交换,然后键入字符(不是整数),它就会陷入无限循环。 (参考下一个代码)
#include <iostream>
#include <limits>
using namespace std;
int main() {
int n;
while (true) {
cout << "Type >> ";
cin >> n;
if (cin.fail()) {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.clear();
cout << "Not a number" << endl;
continue;
}
if (n % 2)
cout << "odd";
else
cout << "even";
cout << endl;
}
return 0;
}
我想知道 cin.clear() 和 cin.ignore() 之间是否需要序列。 如果是,我想知道它为什么需要序列。
谢谢阅读我的问题。对于您的任何回复,我将不胜感激。 很抱歉写的口齿不清。
【问题讨论】:
标签: c++ infinite-loop iostream cin