【问题标题】:Overwriting text file in C用C覆盖文本文件
【发布时间】:2016-05-25 18:09:01
【问题描述】:

我想从这是我的第一篇文章开始,我不是将其作为家庭作业,而是只是介绍自己使用 C 语言写作。

我试图用我的 for 循环不断地覆盖文件,但是数字在中途开始变得疯狂。

这是输出:

y = 19530

y = 3906

y = 78119530

y = 15623906

y = -1054493078

谁能解释一下为什么在循环的第 3 次迭代中,它会跳转到 78119530?

#include <stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]){
int x = 19530;
int y;
FILE *buff;
buff = fopen("BUFF.txt","w+");

for(int i = 1; i <= 5; i++){
    fprintf(buff, "%d", x);
    rewind(buff);
    fscanf(buff, "%d", &y);
    printf("y =  %d\n", y);
    y = y/5;
    fclose(fopen("BUFF.txt", "w+"));
    fprintf(buff, "%d", y);

    }

 return 0;
}

【问题讨论】:

  • 你的程序在很多方面都被破坏了。你为什么不做任何错误检查?为什么你总是打印x,然后读y
  • 没关系,我是个白痴,哈哈。 :(
  • 所以我删除了 fprintf(buff, "%d", x);和倒带(buff);在 for 循环之外,现在我对用户的输出是正确的。但是,我对文件的输出仍然不正确。
  • 请给我看更新代码。我认为您还需要在fscanf()fprintf() 之间再添加一个rewind(),因为fscanf() 调用也会修改文件指针。
  • 通过进行上述更改并使用 freopen 作为用户 Paddy 解决了我的问题,感谢您的帮助! :)

标签: c file printf overwrite fclose


【解决方案1】:

您正在泄漏文件流。以下行不正确:

fclose(fopen("BUFF.txt", "w+"));

您在这里所做的是再次打开文件,并关闭 new 流,使旧流(保留在 buff)有效。

你想要这个:

fclose(buff);
buff = fopen("BUFF.txt", "w+");

或者这个:

freopen("BUFF.txt", "w+", buff);

【讨论】:

  • 我明白了,谢谢!我认为我的声明将等同于 freopen。
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2011-11-02
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2012-09-21
相关资源
最近更新 更多