2013-12-17 31 views
0

我已經詳細瞭解了所有相關的問題,以量化文本文件中某個單詞的出現,並且我仍然無法獲得該單詞的執行和計數。我沒有得到一個錯誤,但返回的輸出是:C字發生

打開的文件 字符數= 0 4195872

恰好有6個字在「file.txt的」「通信」,我需要的只是計數器返回值6.任何幫助將非常感激。

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

    int main(){ 

    int counter; 
    int ch; 
    int str; 

    FILE *input; 
    input = fopen ("file.txt", "r"); 

    if (input == NULL) 
    { 
      printf("File failed to open \n"); 
    } 
    else 
    { 
      printf("File opened \n"); 
      do { 
        str = fgetc(input); 
        //  if ((char*)str == keyword) counter++;        
        if (str == ch)counter++; 
        } while (str != EOF); 

      printf("character count = %i %i\n", counter, ch); 
          fclose(input); 
       } 
     return 0; 
    } 
+3

'ch'永遠不會被初始化。 –

+2

和'counter'。 – BLUEPIXY

+2

在你的行'if(str == ch)counter ++;'你只是數字而不是單詞。你必須通過字符匹配字符來計算字數。如果我不清楚,請告訴我。 – jml

回答

1

您沒有初始化您的ch和計數器變量。所以他們可以有任何驚人的價值。 所以,你得到結果4194872並不奇怪。

你所犯的另一個嚴重錯誤是你的程序從來沒有真正計算過單詞「函數」的出現。在你的程序中,變量str只能表示一個字母,而不是單詞。所以當你用str == ch來測試是否存在「對應」這個詞時,你實際上是在測試的字母等於c(這隻有在你正確初始化str變量的情況下才是真的。將str聲明爲char類型,而不是int類型)。

單詞之間進行比較的正確方法是逐個比較它們的字母。如果有任何字母不符合,則返回false。

閱讀此代碼以瞭解比較過程。

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

int main(int argc, char **argv) 
{ 

    FILE * file = fopen("file.txt","r"); 
    if(file == NULL) {printf("File not open"); return -1;} 
    char* str ="correspondence"; //Declare str as an array and initiate it with your word 
    char input[50]; //Declare an char array long enough to hold ordinary words 
    int i; 
    int count = 0; 
    while(fscanf(file,"%s",input) != EOF) 
    { 
      for(i = 0;i < strlen(str) && i < strlen(input) ;++ i) 
      { 
        if(input[i] != str[i]) break; 
        else i++; 
      } 
      if(i >= strlen(str) && strlen(str) == strlen(input)) 
      count++; 
      memset(input,0,sizeof(input)); 
    } 

    printf("word count = %d",count); 

    return 0; 
} 
+0

嗨Richard,當變量初始化時返回零。我已經嘗試修改代碼,將str更改爲char以便讀取字符串,但使用fgetc和字符時存在問題 – user2821434

+1

您需要使用fscanf來讀取單詞。 fgetc只能讀取一個字母。 –

+0

謝謝謝謝謝謝,我修改我的代碼使用fscanf,它的作用就像一個魅力。 :) – user2821434

1

您需要在比較之前初始化ch。

+0

當我初始化ch和計數器我得到0返回在輸出中。 – user2821434