C++17 · formatted input diagnostics

流状态灯与失败恢复

把一次 operator>> 拆成可观察的动作:字符是否被消费、状态位何时改变,以及恢复顺序为什么不能颠倒。

输入 → 提取尝试 → 状态位
状态复位 ≠ 缓冲区前进

诊断台

提示:空白会被格式化读取跳过。用 x 观察失败,用空输入观察 EOF 如何被“读取尝试”发现。
std::cin 模拟缓冲区position 0 / 7
剩余缓冲:17 x 23
当前 value:未赋值

恢复顺序挑战

先识别错误顺序

流已在字符 x 上失败。判断“直接再读 → clear → 再读”为什么救不回来。

读取 intclear()读取 int

组装正确恢复链

依次选择动作。目标:解除 fail、移走坏 token,再成功读出后面的 23

尚未选择
1 · 先复位
clear() 让流重新接受操作,但游标不动。
2 · 再消费
ignore(...) 或读取字符串,把错误输入移出缓冲区。
3 · 然后重试
EOF 不是看着游标猜出的,必须由一次读取尝试报告。