GESP 四级 · GESP 202403 C++ 四级 第 11 题

选择题 · 答案 C

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

题目

第11题 如果文件 1.txt 中的内容如下,则执行下面 C++ 代码时,注释了 #### 那行代码所输出的 $x$ 的值为( )。

50 2024 3.16 I
love
GESP!
int main()
{
    ifstream fin;
    string line;
    int x;
    fin.open("1.txt", ios::in);

    for (int i = 0; i < 2; i++) {
        fin >> line;
        cout << line << endl;
    }
    fin >> x;
    cout << x << endl; //####
    
    cout << endl;
    return 0;
}
答案:C

解题思维

答案C。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】文件流操作|字符串与整数混读|cin>>跳过空白

1. 🎯 考纲定位:本题考查《GESP 考试大纲》二级"文件与流"模块中混合类型读取的综合运用。命题人特意在二级内容后设置此题,卡住多数考生对 cin>> 自动跳过空白与换行符这一行为的认知盲区。

2. 🧠 解题思维:流式读取时,cin>>string 按空白分隔逐词读入;循环两次后,fin>>x 会跳过文件剩余空白(换行)并读取下一个整数。文件顺序为 50→2024→3.16→I→love→GESP!,故 x 被赋值为 3。通法:混读时默认按空格分隔,对后续整数自动跳过空白,无需手动定位。

3. 🪤 陷阱拆解:选项 A(5)误以为只读首词;B(2024)停在第二词;D(0)是默认值陷阱。命题人利用考生对 cin>> 跳过空白机制不熟悉,故意在整数前放置非数字字符。若只背结论,忽略流操作符的自动跳过特性,必选错。

4. 🔄 反命题思维:若将 fin>>x 改为 fin>>line,则 x 变为字符串"3";若增加一次 cin>>line,则多读一个词。刷到类似题先问:"命题人想考我什么"——这里是流操作符对空白和换行的自动处理。

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