C - 附加在第二行文件中

时间:2016-10-26 12:20:57

标签: c file append

我试图追加到我的txt文件的第二行。我想要的txt文件格式如下:

1 2 3 4 5

1.2 3.5 6.4 1.2 6.5

基本上,我想追加文件的前两行。

void write_stats(int tries, int num_letters, int tries_sucess)        
    FILE *stats;
    stats = fopen("C:\\Users\\rjmal\\Documents\\CLION PROJECTS\\JogoDaForca\\stats.txt", "a");
    if(stats == NULL)
    {
        printf("can't open file\n");
        exit(0);
    }
    fprintf(stats," %d\n",tries);
    fprintf(stats," %f",(float)tries_sucess/num_letters);
    fclose(stats);

}

每次运行程序时如何在不在文件上创建新行的情况下进行此操作?

根据我制作的代码,我得到的结果如下:

1

3 1.5

1 2.3

1 个答案:

答案 0 :(得分:0)

由于计算机中考虑文件和行的方式,您无法根据需要垂直打印。相反,你可以做的是在两个数组中存储所有这些数字(即尝试 AND (float)tries_sucess / num_letters )并打印内容按顺序在同一行上的每个数组。实际上,这将在打印之前缓冲您的内容并根据需要进行格式化。

通过这种方式,您可以将所有数据打印成两行,现在分别对应一个数组。

或者,您可以创建两个char数组并将它们视为实际的字符串缓冲区,并使用sprintf记录它们。然后,一旦完成,您可以通过单个fprintf调用打印每个char数组。

假设您创建了两个足够长的char数组,下面是新write_stats的示例代码。它现在只用于将统计数据记录到两个缓冲区中。

void write_stats(int tries, int num_letters, int tries_sucess, char* buffer1, char* buffer2)
{
    sprintf(buffer1 + strlen(buffer1)," %d\n",tries);
    sprintf(buffer2 + strlen(buffer2)," %f",(float)tries_sucess/num_letters);
}

请注意,您需要使用0启动缓冲区,以便能够像我一样轻松使用strlen函数。此外,您最终(即当您完成调用write_stats时)需要调用fprintf,在一个块中定义了buffer1和buffer2,如下所示。

FILE *stats;
stats = fopen("C:\\Users\\rjmal\\Documents\\CLION PROJECTS\\JogoDaForca\\stats.txt", "a");
if(stats == NULL)
{
    printf("can't open file\n");
    exit(0);
}
fprintf(stats,"%s\n%s", buffer1, buffer2);
fclose(stats);

由于要记住很多细节,我认为最好看到这个想法在起作用。有关工作实现,请参阅here,并提供一些注释以帮助详细说明一些细节。正如您可能观察到的那样,给出的输出是水平的,并且是2行,如您所描述的和下面给出的那样。

1 3 13 55 233
2.000000 1.600000 1.619048 1.617978 1.618037