下面程序能够把 Hello 写入 data.txt 文件中。
ofstream fout("data.txt");
cout << "Hello";
fout.close();答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】文件流操作|输出重定向|程序语义理解
程序只创建了 ofstream fout 对象却从未调用 fout << 写入任何内容,cout << "Hello" 输出的是标准输出而非文件流,最后 fout.close() 仅关闭流对象而不改变文件内容。data.txt 文件在程序执行后仍为 0 字节空文件,因此无法把 Hello 写入该文件。
解题关键要分清两个流:标准输出流 cout 与文件输出流 fout 是两条独立通道。ofstream 构造后默认打开文件,但写入必须显式通过 fout << 完成,否则流对象只是被创建并关闭,对文件无实际影响。命题人故意在代码中混用 cout 与 fout,利用考生对文件流语义的模糊认知设陷阱。
错误选项 A 的陷阱在于把"有 fout 对象"等同于"文件会被写入",这是典型的偷换概念。代码中缺少 fout << "Hello" 或 fout << endl 等写入语句,属于边界条件缺失;同时把 cout 的输出误认为文件输出,是程序语义理解不足。如果你只背结论"文件流能写文件",不理解流对象必须配合 << 操作,就会掉进这个坑。
反命题视角下,若把 fout << "Hello" 插入到 close 前,程序就能正确写入文件;若题目问"能否把 Hello 输出到标准输出",则答案为正确。刷到类似题时,先问自己:文件流是否真的被用于写入?cout 和 fout 是否被混淆?这题的核心就是考察对文件流操作语法的精确掌握。