我试图追加到我的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
答案 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