2015-09-05 104 views
-2

我最近寫了一段代碼來計算文本文件中的行數,但是,while循環部分只是不能正常工作並且永遠循環。任何人都可以幫助我找出那段代碼有什麼問題?爲什麼這段代碼不起作用? (C基本IO)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
FILE *fp; 
int main() { 
    fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r"); 
    int i=0; 
    while(!feof(fp)){ 
     i++; 
    } 
    fclose(fp); 
    printf("The Number Of Sentence In That File: %d",i); 
    getch(); 

} 
+1

所有您在循環做的是'我++; '。你想做什麼?閱讀文件,也許? –

+1

它究竟如何不能正常工作? – ameyCU

回答

2

問題是沒有預先調用feof(fp),所以執行在文件開始時暫停。您需要顯式調用類似,getchar(), fscanf(), fgetc(),等下面是一個例子

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

FILE *fp; 
int main() { 
    fp=fopen("test.txt","r"); 
    int i=0, ch=0; 

    while((ch = fgetc(fp)) > 0){ 
     if(ch == '\n') 
      i++;   
    } 
    fclose(fp); 
    printf("The Number Of Sentence In That File: %d\n",i); 
    getchar(); 
} 
2

對於你願意,你可以嘗試這樣的東西是什麼 -

char *s; 
s=malloc(255); 
while(fscanf(fp,"%254s",s)==1) 
{ 
    i++; 
} 
... 
free(s); 

這將給所需的輸出。

而且 -

while(!feof(fp)) 

feof控制迴路永遠是錯的。而你永遠不應該在循環使用feofRefer here

2

你的循環不會終止,因爲你沒有做與循環內的任何文件。

而不是使用feof來控制循環,我會建議使用getline()

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

FILE *fp; 
int main() { 
    fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r"); 

    int i = 0; 
    char *line = NULL; 
    size_t len = 0; 

    while (getline(&line, &len, fp) != -1) 
     i++; 

    free(line); 
    fclose(fp); 
    printf("The Number Of Sentence In That File: %d\n",i); 
} 

注意:在這種情況下line設置爲NULLlen設置0,因此getline()將分配一個緩衝器,用於存儲所述line。在程序返回之前應該釋放這個緩衝區。

更新

您可以使用getline的返回值,如果你也想知道字符的文件數:

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

FILE *fp; 
int main() { 
    fp=fopen("C:\\Users\\Alan\\Desktop\\text.txt","r"); 

    int i = 0; 
    int j = 0; 
    int read = 0; 
    char *line = NULL; 
    size_t len = 0; 

    while ((read = getline(&line, &len, fp)) != -1) { 
     i++; 
     j += read; 
    } 

    free(line);  
    fclose(fp); 
    printf("The Number Of Lines In That File: %d\n", i); 
    printf("The Number Of Chars In That File: %d\n", j); 
} 
相關問題