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

输入流挂起

1. 输入流挂起(Fail State)

当从输入流(如std::cin)读取数据时,可能因以下原因进入错误状态

  • 类型不匹配:例如读取整数时输入了字母(如"abc")。
  • 文件结束(EOF):输入源被关闭(如 Ctrl+D/Linux 或 Ctrl+Z/Windows)。
  • 流缓冲区损坏:例如读取超过最大长度导致溢出。

此时,流的状态标志(如failbiteofbit)会被设置,流进入挂起状态,后续操作会被阻塞。

2. 忽略整行(Clear Invalid Data)

当流挂起时,错误数据会残留在输入缓冲区中。若不清除,后续读取会持续失败。因此需要忽略当前行的所有内容:

// 忽略当前行剩余字符,直到换行符 '\n'
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  • std::numeric_limits<std::streamsize>::max() 是最大可忽略字符数(防止无限循环)。
  • '\n' 是终止字符,确保忽略到行尾。

3. 流复位(Reset Stream State)

忽略错误数据后,还需重置流的状态标志(清除failbiteofbit),使流恢复可用:

// 清除错误标志,使流恢复正常
std::cin.clear();

完整示例

假设用户应输入整数,但输入了非数字字符:

#include <iostream>
#include <limits>  // 为 std::numeric_limitsint main() {int num;std::cout << "Enter an integer: ";while (!(std::cin >> num)) {  // 读取失败时std::cerr << "Error: Invalid input. Please enter an integer.\n";// 1. 清除错误标志std::cin.clear();// 2. 忽略当前行的所有内容std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');std::cout << "Try again: ";}// 流恢复正常后,继续处理正确输入std::cout << "You entered: " << num << std::endl;return 0;
}

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

相关文章:

  • 基于openEuler搭建Glusterfs集群实验
  • 2025企业官网黑链攻防实战:从紧急处置到长效防御体系构建
  • Python-异常、模块与包
  • 1Panel V1 无缝升级到 V2 版本 实现多个 PHP 网站共享一个容器
  • MySQL表的增删查改(下)(7)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • 藏不住了,全是硬货!极空间快照,夸克网盘挂载,HDMI桌面输出全部安排!
  • 数据结构 之 【链式二叉树】(C语言实现二叉树的前序中序后序层序遍历,节点个数、树的高度、第K层的节点个数、查找、完全二叉树的判别、销毁创建二叉树)
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十八天
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • Ant ASpin自定义 indicator 报错
  • map数据结构在Golang中是无序的,并且键值对的查找效率较高的原因
  • 一些有意思的Python语法特性
  • pytorch的介绍以及张量的创建
  • 企业培训笔记:Vue3前端框架配置
  • mac电脑的usr/libexec目录是干什么的?
  • 怎么处理多源异构数据?搞不清楚就别谈数据融合!
  • Linux的基础I/O
  • PDF 转图助手 PDF2JPG 绿色版:免安装直接用,急处理文件的救急小天使
  • Genus:设计信息结构以及导航方式(路径种类)
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • cesium添加原生MVT矢量瓦片方案
  • 云暴露面分析完整指南
  • 香港站群服务器8C/4C/2C/1C有什么区别
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • C++11中的std::minmax与std::minmax_element:原理解析与实战
  • 12. 说一下 https 的加密过程
  • 笔记 | 理解C/汇编中的数组元素访问
  • 飞算JavaAI:给Java开发装上“智能引擎”的超级助手
  • UNet改进(21):门控注意力机制在UNet中的应用与优化