簡體   English   中英

C-附加在文件的第二行

[英]C - Append on 2nd line of file

我試圖在我的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

由於在計算機中考慮文件和行的方式,因此無法按需垂直打印。 相反,您可以做的是將所有這些數字(即, 嘗試 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);

由於有很多細節需要牢記,因此我認為最好是在工作中看到這個想法。 請參閱此處以了解有效的實現方式,並附上一些注釋以幫助詳細說明一些細節。 您可能會看到,給定的輸出是水平的,分為兩行,如您所描述的和下面給出的。

1 3 13 55 233
2.000000 1.600000 1.619048 1.617978 1.618037

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM