簡體   English   中英

C編程fprintf問題

[英]C Programming fprintf issue

在文本上寫文件時遇到問題。 正如您所看到的,我使用\\n將另一組數據放在下一行。 問題是當我關閉文件並再次保存每行的數據時,以\\n結束\\n\\n等等。 這就是為什么我的文件看起來像這樣

首先要保存

 test, test, test
 test, test, test

第二個保存

 test, test, test

 test, test, test

第三個保存

test, test, test


test, test, test

這就是為什么當我在屏幕上顯示它...之間有垃圾值...我的代碼如下:

save(){
     int i = 0;
     FILE *stream = NULL;
     stream = fopen("student.txt", "wt");
     printf("\nSaving the student list directory. Wait a moment please...");
     printf("\nExiting the program...");
     for (i=0; i<recordCtr; i++){
        fprintf(stream, "%s, %s, %s\n", array[i]->studentID, array[i]->name, array[i]->course);  
     }                   
}

請幫助...任何建議將不勝感激。 先感謝您。

不知道你究竟做了什么,但如果你再次保存它之前解析文件可能你忘記從原始的最后一個字符串中刪除舊\\n ..

編輯:這實際上是正確的。 OP使用fgets函數,其中包括行終止符。

因此,從strtok “test,test,test \\ n”開始,他將獲得“test”“test”“test \\ n”,這樣當它將被保存回來時,新的換行符(忘記它)被添加到文件中。

您可以通過將最后一個字符設置為null來修復它

linebuffer[strlen(linebuffer)-2] = '\0'

(它是安全的,因為fgets自己返回一個以null結尾的字符串)

你也可以添加\\n到使用的分隔符,你應該最終有相同的行為(不確定與strtok的空標記,但IIRC他們只是被丟棄)。

我猜這是在Windows上 - 改變你的行:

stream = fopen("student.txt", "wt");

至:

stream = fopen("student.txt", "wb");

你不會得到額外的\\r s。

或者,也許是最后一次你的琴弦fprintf ING已經在最后一個換行符。

我猜你的array[i]->course字段包含之前在上次保存中寫的\\ n。 檢查填充數組的代碼,並確保它正在跳過換行符。

這里:

fgets(linebuffer, 45, stream);

如果有的話,從linebuffer刪除尾隨\\n

for (int i=strlen(linebuff)-1; i>=0 && linebuff[i]=='\n'; linebuff[i--]='\0');

暫無
暫無

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

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