【问题标题】:File deletes content after stopping execution in C文件在 C 中停止执行后删除内容
【发布时间】:2018-01-05 18:55:29
【问题描述】:

所以我试图将一堆数据保存在一个文本文件中以便稍后加载。 该函数将数据正确打印到文本文件,但是当我停止执行并再次启动它以查看它是否加载时,文本文件中没有数据。 它发生在我停止程序后。

这里是使用的函数:

void saveGame(t_game game, int width, int height){
FILE * file= fopen("save.txt", "w+");
int i = 0;
int j = 0;

fprintf(file,"%d%d", game.origbomb, game.wincount);

for(i=0;i<width;i++){
    for(j=0;j<height;j++){
        fprintf(file,"%c",game.map[i][j]);
    }
}
for(i=0;i<width;i++){
        for(j=0;j<height;j++){
            fprintf(file,"%c",game.bombmap[i][j]);
        }
    }
fclose(file);}

【问题讨论】:

  • 调试 101:一次测试一件事。如果你的读没有看到你的写,你不知道哪一个坏了。做你的写,然后用其他东西查看文件,比如文本编辑器或只是 cat。如果文件看起来不错,那么就是读取损坏了,
  • fscanf(file,"%d%d", &amp;game.origbomb, &amp;game.wincount); 这是一种有趣的格式。扫描如何区分 3 x 12 和 31 x 2 地图?在文件中两者看起来不会像 312 吗?
  • 这个功能看起来不错。它写了它应该写的东西,但它不“保存”。因此,当执行停止时,文件变为空。编辑:我保存的数字永远不会超过 9
  • 那不是在写,是吗?继续调试:打印出文件名。这是你所期望的吗? fprintf 调用的返回值是多少? ...
  • 如果这看起来像你正在做的那样,你可能实际上想要“r+”,而不是“a+”。

标签: c file-handling


【解决方案1】:

你应该使用:

FILE * file= fopen("save.txt", "a+");

这将附加到文件中。

【讨论】:

    【解决方案2】:

    如果你“停止执行”,那么我想fclose 没有被调用,那么文件中只会出现刷新的数据。在您调用fprintf 之后,使用fflush 手动强制刷新文件内容。

    另外,考虑从文件编辑器而不是程序检查文件内容。可能你没看错。

    最后,如果您要扩展现有内容而不创建新文件,请考虑使用“a”选项打开文件。

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2021-12-05
      • 2019-09-01
      • 2021-09-27
      相关资源
      最近更新 更多