2017-10-18 287 views
-1

我試圖將一些數據輸入到文件中,然後在控制檯上讀取並打印它。文件輸出不正確

這裏是我的代碼:

fp=fopen("user1","w+"); 
    char line[1000]; 
    char *c; 
    //write on file 

    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     else 
      fputs(line,fp); 
    } 
    //read from file 
    fflush(stdin); 

    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     else 
      printf("%ch",c); 
    } 

我輸入的數據作爲

bjsa

:WQ

輸出:

h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h 

是什麼問題?

+0

我想你的意思'的printf(「%C」 ,c)',這就是爲什麼你會在輸出中獲得很多h的原因。 – Milack27

+0

第一個問題是您沒有發佈完整的代碼。不要讓我們猜你是否想要一個好的答案。 –

+0

我發佈了與上述問題相關的代碼部分。發佈完整的代碼只會分散注意力,從實際問題中分散注意力,並將問題搞亂。 –

回答

1

我看到兩個問題

1)您fgetc分配給一個char點。那是錯的。它應是一個int

2)寫入文件後,你應該關閉它,然後打開它讀取

喜歡的東西:

fp=fopen("user1","w+"); 
    char line[1000]; 
    int c;    // notice ...... 

    //write on file  
    while(1) 
    { 
     fgets(line,sizeof(line),stdin); 
     if(strcmp(line,":wq\n")==0) //input ends when user enters :wq 
      break; 
     fputs(line,fp); 
    } 
    fclose(fp); 


    //read from file 
    fp=fopen("user1","r"); 
    while(1) 
    { 
     c=fgetc(fp); 
     if(c==EOF) 
      break; 
     printf("%ch",c); 
    } 
    fclose(fp); 
+0

您必須檢查'fgets()'的返回值。你應該避免無限循環;在第一個循環條件中測試'fgets()',並在第二個循環中分配和比較結果。 –

+0

關閉和打開文件幫助。我忘記了寫入文件將指針向下移動到最後寫入位置。這解釋了爲什麼我得到這麼多'h'。 –

+0

你能告訴你爲什麼在c中使用int類型嗎? –