2015-02-23 53 views
1

所以我試圖編寫一個函數來讀取文本文件中的行數。但是,我注意到即使超出我的文本文件中的行數,該函數也不會退出。爲什麼?爲什麼它的工作,當我把爲什麼我的閱讀文本文件中的行數不行?k

fgets(sentence, 70, inputFile); 

櫃檯前++

int GetNumLine(char *fileName){ 

    FILE *inputFile; 

    //counter are used to store number of lines 
    int counter = 0; 

    char sentence [70]; 

    inputFile = fopen(fileName,"r"); 

    //if there are anything wrong with inputfile 
    if(inputFile == NULL){ 
     printf("Error while opening file"); 
     exit(1); 
    } 


    while(!feof(inputFile)){ 


     counter++; 
    } 

    fclose(inputFile); 

    return counter; 
} 
+1

你沒有對while循環中的文件指針做任何事情。 'fgets()'讀取一行並前進指針。 – 2015-02-23 02:46:49

+0

因爲您從未從文件中讀取任何內容,所以您始終保持着! – immibis 2015-02-23 02:55:53

回答

1

這將是總是如此

while(!feof(inputFile)) 

你需要從文件,以到達終點讀和EOF標記被設置,我會推薦這樣做

int chr; 
while ((chr = fgetc(inputFile)) != EOF) 
    counter += (chr == '\n') ? 1 : 0; 

當你把你從文件中讀取並改變其位置在FILE *結構,當你嘗試讀取超出文件的末尾fgets()counter++之前,EOF將設置和feof(inputFile)將返回非零值。

代碼與fgets()工程,但不穩健,因爲你可以有一個多於69字符的行,它會被計算兩次,我的建議結果將永遠是正確的。