第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。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】文件流操作|字符串与整数混读|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,则多读一个词。刷到类似题先问:"命题人想考我什么"——这里是流操作符对空白和换行的自动处理。