我目前正在做一个简单的“你几岁”计算器。但我想检查用户输入的是 int 还是 char。所以我做了这个:
if (!cin) {
cout << "Error" << endl;
cin >> year;
}
但是,如果我这样做并输入一个字符,它只会通过并且不允许新的输入。
参考:输入 char 的 int 的 cin 会导致本应检查输入的循环变得疯狂
这是重复的,但规范的答案是:
std::cin.clear(); // clears the error flags
// this line discards all the input waiting in the stream
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
然后执行以下操作:
int year;
while (!(std::cin >> year)) {
std::cin.clear(); // clears the error flags
// this line discards all the input waiting in the stream
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "error" << std::endl;
}
// do something with year
因此,如果您的输入看起来像:
a
b
c
42
它将打印错误三遍。