【问题标题】:C - Append on 2nd line of fileC - 附加在文件的第二行
【发布时间】:2017-03-08 19:29:53
【问题描述】:

我试图在我的 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

【问题讨论】:

  • 显示所有相关文件的示例以及您获得的结果文件和您想要的结果文件。
  • 编辑您的问题,不要发布 cmets。
  • stat.txt 文件在您运行程序之前看起来如何?
  • @MichaelWalz 为空

标签: c file append


【解决方案1】:

由于计算机中考虑文件和行的方式,您无法按照自己的意愿垂直打印。相反,您可以将所有这些数字(即 tries 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 时)需要在定义 buffer1 和 buffer2 的块中调用 fprintf,如下所示。

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 以获得有效的实现,并使用一些 cmets 来帮助详细说明一些细节。正如您所观察到的,那里给出的输出是水平的,并且是 2 行,正如您所描述的和下面给出的。

1 3 13 55 233
2.000000 1.600000 1.619048 1.617978 1.618037

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2015-12-29
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多