2016-10-26 57 views
0

我試圖追加到我的txt文件的第二行。我要爲我的txt文件的格式如下:C - 追加文件的第二行

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

'stat.txt'文件在運行程序時看起來如何_before_? –

回答

0

由於文件的方式和線路在電腦認爲,你不能垂直按照你的願望打印。相反,您可以做的是將所有這些數字(即嘗試(float)tries_sucess/num_letters)存儲在兩個數組中,並按順序在同一行中打印每個數組的內容。實際上,這將會在打印和緩存您的內容之前根據需要進行緩衝。

通過這種方式,您可以將所有數據打印成兩行,每行現在對應一個數組。

或者,您可以創建兩個char數組,並將它們視爲實際的字符串緩衝區,並使用sprintf記錄它們。然後,一旦完成,您可以通過單個fprintf調用打印每個字符數組。

假設您創建了兩個足夠長的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,在緩衝區1和緩衝區2中定義的塊中,如下所示。

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