GESP 四级 · GESP 202512 C++ 四级 第 14 题

选择题 · 答案 D

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

题目

执行下面 C++ 程序,会输出( )。

int main() {
    ofstream fout("test.txt");
    fout << "Happy" << endl;
    fout << "New Year";
    fout.close();

    ifstream fin("test.txt");
    string s1, s2;
    fin >> s1;
    getline(fin, s2);
    fin.close();

    cout << s1 << "|" << s2;
    return 0;
}
答案:D

解题思维

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

常见错误

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

详细解析(节选)

【考点】文件流操作|字符串输入|getline 的换行处理

【考纲定位】本题对应 GESP 四级“输入输出”模块,重点考察文件流与字符串输入的配合。命题人利用“>>只读空格前字符”与“getline 读取整行”的交互,卡住 70% 考生对缓冲区残留换行的认知盲区。

【解题思维】文件写入后内容为:第一行"Happy",第二行"New Year"。fin >> s1; 仅提取"Happy"(遇空格/换行停止),回车符仍留在缓冲区;随后 getline(fin, s2); 从缓冲区剩余位置读,恰好读到空行,s2 被赋空串。最终输出为"Happy|"。

【陷阱拆解】A 项假设 getline 读了第二行,却忽略了>>后缓冲区残留;B 项凭空加入空格;C 项完全颠倒输入逻辑;D 项才是对">>遇换行停止”与"getline 读空行”的正确组合。若只记结论不理解流操作细节,必选错。

【反命题思维】若将第二个输出改为 fout << "New Year" << endl;,则 getline 会读到"New Year",答案变 A;若改为 fin >> s1 >> s2; 则 s2 会读到"New Year",答案变 A;若改为 cin.ignore() 再 getline,s2 会读到"New Year",答案变 A。刷到类似题先问">>后缓冲区还剩什么”。

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