2014-03-28 31 views
-1

我正在掃描一個文件並計算有多少個字母是大寫,小寫,數字或其他字符; 它給我分段錯誤的一些原因;我也不太清楚爲什麼 這裏是我的代碼當掃描文件和計算c值時出現分段錯誤

#include<stdio.h> 
#include<ctype.h> 

int main(void) 
{ 
    FILE *ifp, *ofp; 
    char *mode = "r"; 
    char words; 
    int lengthOfWords, i; 
    int uppercase=0, lowercase=0, digits=0, other=0, total=0; 

    ifp = fopen("story.txt", "r"); 

    if (ifp == NULL) { 
     fprintf(stderr, "Can't open input file in.list!\n"); 
     return 0; 
    } 
    else 
    { 
     while(fscanf("%c", &words) != EOF) 
     { 
      if ((words>='A')&&(words<='Z')) 
      { 
       uppercase++; 
      } 
      else if ((words>='a')&&(words<='z')) 
      { 
       lowercase++; 
      } 
      else if ((words>='0')&&(words<='9')) 
      { 
       digits++; 
      } 
      else 
      { 
       other++; 
      } 
     } 
    } 
    printf("\n%d %d %d %d\n",uppercase, lowercase, digits, other); 



return 0; 

} 

爲什麼我只是通過文字閱讀它的字符計數他們,因爲他們去

順便說這裏是我的txt文件。

The quick Fox jumps 
over 2014 *$!&#@] lazy dogs. 
+1

'fscanf(「%c」,&words)' - >'fscanf(ifp,「%c」,&words)' – BLUEPIXY

+0

編譯器至少應該給你一個警告'fscanf(「%c」,&詞)''。 –

回答

3

您忘記傳遞FILE(流指針)作爲fscanf函數的參數:

while (fscanf(ifp, "%c", &words) != EOF) 

按照man,的fscanf簽名是:

int fscanf(FILE *restrict stream, const char *restrict format, ...); 
+0

所以我需要提供文件名稱,即使我之前做過fopen? – nanobots

+2

是的,因爲'fscanf'函數不知道它正在讀取哪個流。 – Aliou

+0

不是文件名,是指向打開文件的流指針。 – CMoi

相關問題