2014-03-06 31 views
-1

每次我嘗試運行代碼時,它都會打印出文件的內容,但是它會在最後打印出一個垃圾值,我不知道如何去掉。我應該將文件的內容存儲到一個數組,但是我有點困惑如何做到這一點?存儲和清除垃圾值

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char filePrinter(char*arr) 

int main (int argc, char**argv) 
{ 
    char fileArray[150]; 

    if(argc !=2) 
    { 
     printf("Invalid Entry. Please Enter name of program followed by input filename\n"); 
    } 

    filePrinter(fileArray); 

    return 0; 
} 

char filePrinter(char*arr) 
{ 
    int i; 
    FILE*file; 
    i=0; 

    file=fopen("assests/room.txt","r"); 
    if(file == NULL) 
    { 
     printf("Could not open file\n"); 
     exit(-1); 
    } 
    else 
    { 
     while(0 ==feof(file)) 
     { 
      i=fgetc(file); 
      printf("%c", i); 
     } 
    } 
    fclose(file); 
    return i; 
} 

文件內容:

10x16 ds5 h6,5 g7,8 p3,3 
10X16 de4 h5,7 g9,2 
10X16 dw6,h2,3 m6,7 
10X16 dn3,h2,4 p2,3 
10X16 de2 h9,9 m4,5 
10X16 dn8 h4,5 g1,1*/ 

回答

-1

我認爲代碼應該是:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void filePrinter(char*arr); 

int main (int argc, char**argv) 
{ 
    char fileArray[150]; 
    memset(fileArray, 0, sizeof(fileArray)); 

    if(argc !=2) 
    { 
     printf("Invalid Entry. Please Enter name of program followed by input filename\n"); 
    } 

    filePrinter(fileArray); 

    return 0; 
} 

void filePrinter(char *arr) 
{ 
    int c = 0, j = 0; 
    FILE* file = NULL; 

    file=fopen("assests/room.txt","r"); 
    if(file == NULL) 
    { 
     printf("Could not open file\n"); 
     exit(-1); 
    } 
    else 
    { 
     while (1) 
     { 
      c = fgetc(file); 
      if (c != EOF) 
      { 
        arr[j++] = c; 
      } 
      else 
      { 
       break; 
      } 
     } 
    } 
    fclose(file); 
    return; 
} 
+0

它存儲數組,但它在最後打印出垃圾值 – user3380932

+0

@ user3380932 add「memset(fileArray,0,sizeof(fileArray));」 –

+0

非常感謝你的工作! – user3380932

0

時機不對比看循環的開始由feof因爲EOF發生在fgetc

更換到

while(EOF!=(i=fgetc(file))){ 
    printf("%c", i); 
} 

int filePrinter(char*arr){ 
    int i = 0, ch; 
    FILE*file; 

    file=fopen("assests/room.txt","r"); 
    if(file == NULL) { 
     printf("Could not open file\n"); 
     exit(-1); 
    } else { 
     while(EOF!=(ch=fgetc(file))) { 
      //printf("%c", ch); 
      arr[i] = ch; //*arr++ = ch; 
      ++i;//i : range check 
     } 
     arr[i] = '\0'; 
    } 
    fclose(file); 
    return i; 
} 
+0

太感謝你了!有用 !但是,如何將文件內容存儲到數組中。我對此有點困惑。 – user3380932

+0

@ user3380932添加了樣本。 – BLUEPIXY

+0

它讓我給我分段錯誤 – user3380932

0

feof返回true,如果最後調用讀操作的命中EOF。您需要在撥打fgetc後測試它。或者,甚至更好,只需檢查fgetc是否返回了特殊值EOF

(A FILE *有一個「文件結束標記」,表示某些讀操作是否已經命中了EOF,讀命令設置了打開EOF之後的「文件結束標記」,在命中之前, ,意思嘗試讀取過去---在文件的結尾,即「檔案結尾標記」是明確的)