C++判断用户输入是否为合法float时出现operator>>编译错误如何解决
错误根因
这个报错是运算符优先级导致的:
C++ 中逻辑非运算符!的优先级远高于输入运算符>>,因此你写的!std::cin >> num会被编译器解析为(!std::cin) >> num:
- 先对
std::cin做逻辑非运算,得到一个布尔类型的结果 - 尝试用这个布尔值调用
>>运算符对float类型的num做右移运算,C++ 没有定义bool和float对应的operator>>重载,因此直接抛出编译错误。
之前用int类型时没有报错,只是语法层面的巧合:布尔值可以隐式转换为整数(true转1、false转0),整数右移整数是合法的语法,但此时校验逻辑完全错误,根本不是在判断输入是否合法,只是在做无意义的位运算而已。
额外逻辑问题
你的代码还存在重复读取输入的问题:
你在if判断外已经执行了一次std::cin >> num;,if判断中又执行了一次,等于要求用户连续输入两次值才能完成校验,完全不符合需求。
修正后代码
#include <iostream> int main() { float num; std::cout << "Input number:"; // 给输入语句加括号保证运算顺序正确,且只读取一次输入 if (!(std::cin >> num)) { std::cout << "It is not float."; } return 0; }
内容的提问来源于stack exchange,提问作者Meilianto Luffenz
相关产品推荐
相关产品推荐

