输入流提供了一些方法检测异常情况,大部分和输入流有关的错误推条件都发生在无数据可读时,例如:可能达到了流尾(文件尾),应该养成读取数据后就检查流状态的习惯,这样就可以从异常中输入中恢复;
下面这个例子需要用户输入一个特殊字符来结束文件的输入:windows输入Control+Z, Linux输入Control+D,,都表示结束输入。
int main() {int num = 0; if(!std::cin.good()) { std::cerr << "Standard input is bad state" << std::endl; } int number = 0; while(!std::cin.bad()) { std::cin >> number; if(std::cin.good()) { num += number; }else if(std::cin.eof()) { std::cout << "eof" << std::endl; break; }else if(std::cin.fail()) { std::cin.clear(); //clear failure state std::string inputBad; std::cin >> inputBad; std::cerr << "WARNING : Bad input : " << inputBad << std::endl; } } std::cout << "Sum is : " << num << std::endl; return 0; }
std::cin.fail,检测的是流状态是否正常,不正常就返回true,
std::cin.eof()表示的是文件的末尾。
std::cin.bad()和
std::cin.good()都表示检测流的正常状态;
当std::cin.bad()为true时,则表示有致命错误。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 想让你多爱自己一些的开源计时器
· 大模型 Token 究竟是啥:图解大模型Token
· 用99元买的服务器搭一套CI/CD系统
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争