std::cin输入float而非int时的异常行为解析求助
输入float值时同时输出Valid和Invalid的原因分析
需求为仅接受int类型输入,其他输入判定无效。但输入类似123.45的float值时,代码会同时输出“Valid Input”和“Invalid Input”,原因如下:
问题代码
#include<iostream> #include<cstdlib> int main(){ int val =0; std::cout<<"222 to quit"<<std::endl; while(true){ if(std::cin>>val) { if(val == 222) break; std::cout<<"Valid Input"<<std::endl; } else { std::cout<<"Invalid Input"<<std::endl; std::cin.clear(); fflush(stdin); } } system("pause"); }
原因解析
- 当输入
123.45这类包含小数的数值时,std::cin >> val(val是int类型)会优先读取整数部分123,这部分符合int的格式要求,因此进入if分支,输出“Valid Input”。 - 读取完整数部分后,输入流中剩余
.45的内容未被处理。下一次循环时,std::cin >> val尝试读取这部分内容,无法将其转换为int类型,于是触发输入失败,进入else分支,输出“Invalid Input”。 - 额外说明:代码中使用的
fflush(stdin)属于C++标准未定义的行为,不同编译器对输入流使用fflush的处理逻辑不一致,这会导致输入缓冲区清理不彻底,进一步加剧这类问题。
内容的提问来源于stack exchange,提问作者MMudhol
相关产品推荐
相关产品推荐

