2013-04-01 23 views
1

我正在用C編寫一個非常簡單的文件讀/寫程序。當我嘗試測試代碼時,輸​​出結果不是我所期望的。這裏是我的代碼:如何在C中修復簡單文件讀/寫程序的輸出?

#include <stdio.h> 

void hwrite(FILE *fp, int count, char *str) { 
     fprintf(fp, "%d ""%s", count, str); 
} 

void hread(FILE *fp) { 
     if(fp != NULL) { 
       char line [128]; 
       while(fgets(line, sizeof line, fp) != NULL) { 
         fputs(line, stdout); 
       } 
       fclose(fp); 
     } 
     else { 
       perror("xxx.txt"); 
     } 
} 

int main(void) { 
     int count = 1; 
     char *str = "test text\n"; 
     FILE *fp; 

     fp = fopen("xxx.txt", "a"); 
     int i; 
     for (i = 0; i < 3; i++) { 
       hwrite(fp, count, str); 
       count = count+1; 
     } 
     fp = fopen("xxx.txt", "r"); 
     hread(fp); 
     return 0; 
} 

該程序編譯沒有問題。然後我執行一次a.out命令並且沒有輸出。我做了第二次,並有一個輸出,但它不完整。在這裏:

[xxxxx xxx]> a.out 
[xxxxx xxx]> a.out 
1 test text 
2 test text 
3 test text 

然後我打開找到這個文件:

1 test text 
2 test text 
3 test text 
1 test text 
2 test text 
3 test text 

爲什麼不顯示在輸出?謝謝你的時間。

回答

4

你永遠不會刷新輸出,所以它不會寫入文件,直到你的程序退出。特別是,它在之後將輸出寫入文件中。重新開放閱讀前,請嘗試fclose

int main(void) { 
    int count = 1; 
    char *str = "test text\n"; 
    FILE *fp; 

    fp = fopen("xxx.txt", "a"); 
    int i; 
    for (i = 0; i < 3; i++) { 
      hwrite(fp, count, str); 
      count = count+1; 
    } 
    fclose(fp); /* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */ 
    fp = fopen("xxx.txt", "r"); 
    hread(fp); 
    return 0; 
} 
+0

我想這個,它編譯,但是當我嘗試運行它的內存映射出現。編輯:沒關係,我不小心叫了兩次fclose。有用。謝謝 –

相關問題