gpt4 book ai didi

c++ - 验证整数输入 C++?

转载 作者:太空狗 更新时间:2023-10-29 23:07:13 25 4
gpt4 key购买 nike

我使用 !(cin >> input) 来验证整数输入,但它不捕获其他数据类型,例如 float 。相反,它取第一个整数。例如:

Please enter a number: 2.5.

我的错误信息出现在这里,它应该循环但它取而代之的是第一个数字。

输出“2”

如何让它忽略小数输入?

最佳答案

输入流将任何以符号开头且后跟至少一位十进制数字的内容视为有效的整数输入。如果你想在包含小数点的小数输入上失败,你需要做一些不同的事情。处理此问题的一种方法是读取一个整数并查看成功读取整数后的字符是否为小数点:

if (!(std::cin >> value)
|| std::cin.peek() == std::char_traits<char>::to_int_type('.')) {
deal_with_invalid_input(std::cin);
}

正如 Thomas Matthews 正确指出的那样,问题并不真正限于 float ,而是任何带有数字前缀后跟非空格(而不是 EOF:上述解决方案实际上会在文件的末尾,即后面没有任何内容,甚至没有换行符)。要只读取后跟空格或文件末尾的整数,可以按顺序执行以下操作:

if (!(std:cin >> value)
|| (!std::isspace(std::cin.peek())
&& std::cin.peek() != std::char_traits<char>::eof())) {
deal_with_invalid_input(std::cin);
}

实际上没有任何方法可以返回已读取的字符。由于在许多地方使用它并不是很好,因此将此功能打包到合适的 std::num_get<char> 中可能是合理的。小平面和imbue()具有相应 std::locale 的流.虽然处理代码的表达式实际上更简单,但它更高级一些。

关于c++ - 验证整数输入 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com