You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《C++编程原理与实践》输入验证:EOF处理逻辑疑问

关于《C++编程原理与实践》中输入终止逻辑的修正

以下是Stroustrup所著《C++编程原理与实践》中的相关内容:

// 某处:让ist在失效时抛出异常:
ist.exceptions ( ist.exceptions() | ios_base::badbit );

我们也可以指定一个字符作为终止符:

for (My_type var; ist>>var; ) {
// 读取至文件结束
// 可检查var是否合法
// 对var执行操作
}
if (ist.fail()) {
// 使用'|'作为终止符/分隔符
   ist.clear();
char ch;
if (!(ist>>ch && ch=='|')) error("输入终止格式错误");
}
// 继续执行:已到达文件结尾或找到终止符

若我们不想接受终止符——即仅接受文件结尾作为结束标志——只需删除error()调用前的检查即可。但终止符在读取嵌套结构文件时非常实用,因此我们会保留使用终止符的可能性。

  • 原文提到“若我们不想接受终止符——即仅接受文件结尾作为结束标志”,但代码中并未检查EOF?
    if (!(ist>>ch && ch=='|')) 
         error ( "输入终止格式错误" );
    

这段代码仅检查终止符,未检查EOF:因为EOF会使std::cin进入失败状态,导致if语句触发error。此时非法输入(如'@')和EOF的效果相同,都会让流进入失败状态。正确的写法应加入EOF判断:

if (!( (ist >> ch && ch=='|') || ist.eof() ) ) 
        error("输入终止格式错误");

修改后的代码会在遇到EOF或终止符时不触发error,仅在非法输入(如非整数)时触发。

内容的提问来源于stack exchange,提问作者Maestro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:05:27