当前位置: 首页 > news >正文

C++初学者指南-2.输入和输出---从输入流错误中恢复

C++初学者指南-2.输入和输出—从输入流错误中恢复

文章目录

  • C++初学者指南-2.输入和输出---从输入流错误中恢复
    • 怎么了?
    • 解决方案:出错后重置输入流

怎么了?

示例:连续输入

int main () {cout << "i? ";int i = 0;cin >> i;  // ← 第一次cout << "j? ";int j = 0;cin >> j;  // ← 第二次cout << "i: " << i <<", " << "j: " << j <<'\n';
}

有效输入⇒预期行为

$ i? 2
$ j? 3
i: 2, j: 3

i 的输入无效⇒无法读取 j

$ i? asdf
i: 0, j: 0

为什么会这样?
如果 cin 在以下代码片段中

int i = 0;
cin >> i;

读取无法转换为 int 类型的字符:

  • cin 的错误位被设置了。
  • cin的缓冲区内容没有被丢弃,仍然包含有问题的输入。
  • 任何尝试从cin读取整数的操作也会失败。

解决方案:出错后重置输入流

  • 清除 cin 的错误位。
  • 清除 cin 的输入缓冲区。
void reset_cin () {    // 清除所有错误状态位cin.clear(); // 清除输入缓冲区cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int main () {cout << "i? ";int i = 0;cin >> i;  // ← 1stif (cin.fail()) reset_cin();cout << "j? ";int j = 0;cin >> j;  // ← 2ndcout << "i: " << i <<", " << "j: " << j <<'\n';
}

i 的无效输入不会影响 j

$ i? asdf
$ j? 3
i: 0, j: 3

附上原文地址
如果文章对您有用,请随手点个赞,谢谢!^_^
在这里插入图片描述

http://www.lryc.cn/news/385347.html

相关文章:

  • 毫秒级响应!清科优能应用 TDengine 建设虚拟电厂运营管理平台
  • 【Ubuntu noble】apt 无法安装软件 Unable to locate package vim
  • Instagram APIj接口——快速获取Ins帖子媒体内容下载链接
  • Java基础(四)——字符串、StringBuffer、StringBuilder、StringJoiner
  • 吐血推荐!3款视频生成工具,全部国产,都免费
  • 【Web3】Web3.js 启动!并解决Web3 is not a constructor报错
  • 算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长
  • 搭建 MySQL MHA
  • python中的线程与进程
  • 网络安全筑基篇——反序列化漏洞
  • 帝国cms定时审核并更新的方法
  • 一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
  • 使用Spring Boot和WebSocket实现实时通信
  • 【Vue】集成富文本编辑器
  • 【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
  • 重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
  • APM教程-SkyWalking安装和配置
  • 斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
  • World of Warcraft [CLASSIC] plugin lua
  • 背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
  • CCSP自考攻略+经验总结
  • 面试突击:ArrayList源码详解
  • 力扣每日一题:2734. 执行子串操作后的字典序最小字符串
  • C++11中std::thread的使用
  • 酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
  • 大数据之Hadoop部署
  • Java异常处理中的“throw”与“throws”的区别
  • 英语智汇学习系统
  • ExtractAItoTEXT 提取Adobe illustrator AI文件中的文字到文本文件翻译并写回到Adobe illustrator AI文件
  • ms17-010 ms12-020 ms-08-067