GESP 四级 · GESP 202312 C++ 四级 第 20 题

判断题 · 答案 B

← 整套速查表 GESP 四级 全部真题

题目

文本文件 1.txt 第 1 行由 01234 共 5 个字符组成其间没有空格,当用C++代码正常打开文件成功并执行如下代码以后,第 1 行长度为 5( )

ifstream filein;
int buff;
filein.open("1.txt");
filein>>buff;
cout<<buff<<endl;
答案:B

解题思维

答案B。cout用于输出到标准输出(通常是屏幕)。cin从标准输入读取。

常见错误

cout和cin在iostream头文件中定义,使用时需#include <iostream>。

详细解析(节选)

【考点】整数输入解析|cin>>流操作规则

🎯 考纲定位:本题定位 GESP C++四级“数据输入输出”模块,核心考查 cin/ifstream 整数提取运算符的跳过前导非数字字符规则。命题人意图检验考生是否真正理解 >> 对整数的解析逻辑,而非机械记忆“读完一行”。这是四级考试中一道经典陷阱题,旨在区分“字符串读取”与“整数解析”的本质差异。

🧠 解题思维:执行 filein>>buff 时,>> 遇到第一个字符 0 仍视为有效数字(leading zero 不影响整数值),随后连续读取 1234,最终 buff 存储十进制值 1234。cout 输出整数时不带前导零,故字符串长度为 4。通法:整数输入运算符会丢弃前导零,只保留数值部分。若输入为 01234,输出为 1234(长度4);若输入为 001234,输出仍为 1234(长度4)。

🪤 陷阱拆解:陷阱在于“前导零被当作数字保留”。若误以为 >> 读取的是字符串,会认为输出仍为 01234(长度5)。实则 C++ 整数流提取器自动忽略前导零,输出时仅显示数值 1234(长度4)。若将 buff 改为 char 类型,则输出为 '0'(长度1);若将输入改为 a01234,>> 遇非法字符 a 即停止,buff 保持未初始化(或零)。

🔄 反命题思维:若输入改为 a01234,>> 遇非法字符 a 即停止,buff 保持未初始化(或零);若输入为 001234,输出仍为 1234(长度4)。命题人想考的是“整数提取器如何处理前导零”,而非“字符串是否完整读取”。若将输入改为 12345,输出为 12345(长度5);若将输入改为 01234 但使用 char,输出为 '0'(长度1)。刷到类似题时,先问自己“命题人想考我什么”——是整数解析还是字符串读取?

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断