使用C++编译器编写C代码:教材文件写入示例无法写入文件
解决C语言文件写入后无内容的问题
从你贴的代码片段来看,大概率是几个常见的小疏漏导致的,我帮你逐一排查:
1. 缺少写入文件的核心逻辑
你贴的代码只到了提示输入的部分,但完全没看到把输入的account、name、balance写入文件的代码!比如你需要用fprintf(格式化写入)或者fwrite把数据写到cfPtr指向的文件里,举个例子:
// 先通过scanf获取用户输入,再执行写入 scanf("%d %s %lf", &account, name, &balance); fprintf(cfPtr, "%d %s %.2lf\n", account, name, balance);
如果没这一步,程序只会帮你创建空文件(因为用了"w"模式),但不会写入任何内容。
2. 没有关闭文件流
C语言里,用fopen打开的文件必须用fclose手动关闭!尤其是写入操作,系统会先把数据暂存在内存缓冲区里,只有关闭文件或者手动调用fflush时,才会把缓冲区的内容真正同步到磁盘。所以在else块的末尾一定要加:
fclose(cfPtr);
如果程序直接退出没关文件,缓冲区的数据很可能不会被写入磁盘,最终文件就是空的。
3. 输入格式不匹配(隐性坑)
如果你的scanf输入格式和提示的要求不一致,比如输入时没按「账号 姓名 余额」的顺序/格式输入,会导致数据没被正确读取,自然也写不进文件。比如要确保输入是类似100 John 450.50这样的格式。
给你补全后的完整可运行示例代码参考:
#include <stdio.h> int main(void) { int account; char name[30]; double balance; FILE *cfPtr; if ((cfPtr = fopen("clients.txt", "w")) == NULL) { printf("File could not be opened\n"); } else { printf("Enter the account, name, and balance.\n"); printf("Enter EOF to end input (Ctrl+D on Linux/macOS, Ctrl+Z on Windows):\n"); // 循环读取输入直到用户触发EOF while (scanf("%d %s %lf", &account, name, &balance) != EOF) { fprintf(cfPtr, "%d %s %.2lf\n", account, name, balance); } // 必须关闭文件,确保缓冲区数据写入磁盘 fclose(cfPtr); } return 0; }
你可以对照自己的代码,看看是不是漏了这些关键步骤,应该就能解决文件为空的问题了。
内容的提问来源于stack exchange,提问作者DudeBro
相关产品推荐
相关产品推荐

