我需要使用 cin 从用户那里读取 int,但如果输入字符串,则打印错误消息。我一直在尝试使用它使用 if 语句和 cin.fail()
如果只输入字符,效果很好。但是,如果用户输入类似 3sadi
的内容,它似乎读取 3 并将字符串的其余部分留在缓冲区中,这不会给我错误消息,因为未设置 cin.fail() 标志。如果字符串的第一个字符是 int,我怎样才能使错误消息仍然打印?
int i1;
cin >> i1;
if (cin.fail() == true) {
cout << "error" << endl;
}
else{
cout << "success" << endl;
}
例如。 32
应该(并且确实)打印成功
red
应该(并且确实)打印错误
3x
应该打印错误,但打印成功并将 x 留在缓冲区中
如何使3x
给我错误消息?或者,我可以将其作为字符串读取并将其转换为 int 并根据它是否失败或成功打印出消息,但是您如何在程序中使用类型转换错误?
数值的格式化输入成功是有一个包含数字的前缀。流不会轻易允许您更改该行为(您可以使用专用std::num_get<char>
方面更改该行为,但我不会将其归类为简单)。最简单的方法可能是检查下一个字符(如果有的话)是否恰好是一个空格(并且不要使用fail()
;你应该只使用布尔值的转换):
if (std::cin && (std::isspace(std::cin.peek()) || std::cin.eof())) {
...
}
另外,不要将条件中的布尔值与true
或false
进行比较:这样做的结果不会变得更布尔。