【发布时间】:2023-03-14 16:17:01
【问题描述】:
我的程序包含一个简单的输入代码:
int number;
std::cin >> number;
当然,如果用户键入 3.14,则只会读取“3”。一般情况下,这对于进一步的代码是可以的,但我希望将这种输入标记为无效并提示用户使用正确的整数重试。
有没有办法检查 int 之后是否输入了任何内容?
【问题讨论】:
-
你谷歌了吗?您可以测试您的读取操作的返回值,例如:cplusplus.com/forum/beginner/21595
-
if (!(std::cin >> number) || !cin.eof())但由于我们谈论的是标准输入,因此并没有真正的“输入结束”。另请注意,我们在一小时前收到了a very similar question。 -
C++ 的格式化输入函数对于任何需要严格输入验证的情况都毫无用处。你可以做到,但它变得非常丑陋。我几乎总是最终提取分隔字符串(如带有
getline的行),然后自己解析它们。 -
您也可以假设该数字是浮点数或双精度数,然后找到该数字的底数/上限。如果它的地板/天花板不等于原来的,那么它就不是一个 int。
-
@5gon12eder,
eof检查是多余的,因为如果!(std::cin >> number)遇到 EOF,它将为真。无论如何,输入可以被重定向,或者用户可以输入 ctrl-D 或任何变体。