如何在c

时间:2017-01-30 16:08:27

标签: c printf fopen

我很难在C语言中迭代地写入.txt文件。

我需要在for循环的每次迭代之后写出一系列值,这样如果我停止我的程序在任何时候运行,我将不会丢失我已经收集的数据。

如果我运行整个循环,但是如果我使用ctrl + c命令阻止程序运行,那么我的代码是有效的,因为它花了太长时间我的.txt文件是空的。

我不知道这是否是由ctrl + c命令引起的,因为该文件没有机会关闭,但是还有其他解决方案吗?我应该打开文件并在每次循环迭代期间关闭它并附加到.txt文件吗?我认为这可能会导致写入.txt文件的先前数据被覆盖,并导致运行时间增加。

这是我目前正在做的一个非常简单的例子,希望它说明了我想要实现的目标:

FILE *fp;
fp = fopen("Output.txt", "w");
int a = 0;
int b = 0;
int c = 0;
for(int i=0;i<500;i++)
{
    a = a+1;
    b = b+1;
    c = c+1;
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file
}
fclose(fp);

1 个答案:

答案 0 :(得分:3)

每次fprintf到文件后,您需要fflush

  

如果流指向未输入最新操作的输出流或更新流,fflush()将导致该流的任何未写入数据被写入文件,并且最后一次数据修改和应将基础文件的最后文件状态更改时间戳标记为更新。

即,

for(int i=0;i<500;i++)
{
    a = a+1;
    b = b+1;
    c = c+1;
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file
    fflush(fp); /* <== here */
}
PS:空白并不是稀缺商品。