2014-04-08 84 views
0

關於我的任務的問題是我必須存儲數組中所有字母的計數,小寫字母和大寫字母的處理方式相同。我使用的策略是將所有字母轉換爲大寫,然後對它們進行計數。但是,當我嘗試打印輸出時,它不會給我正確的輸出。將一個文件的字母計數存儲到一個數組中

例如,我有讀取一個文件:

ADDADD

但對於輸出它給了我一些瘋狂的數字對每個字母。

這裏是我的代碼(有點亂):

void loadText(char story[]) 
{ 
    FILE *input; 
    int letter = 0; 
    int other = 0; 
    int totalcharacter; 
    char words; 

    input = fopen(story, "r"); 

    while(fscanf(input, "%c", &words) != EOF) 
    { 
     if ((words >= 'A') && (words <= 'z')) 
     { 
      letter++; 
     } 
     else 
     { 
      other++; 
     } 
    } 

    totalcharacter = letter + other; 

    printf("Letters: %d\n", letter); 
    printf("Characters: %d\n", totalcharacter); 

    int typeofletter[26];    
    int i = 0; 

    while(fscanf(input, "%c", &words) != EOF) 
    { 
     if ((words >= 'a') && (words <= 'z')) 
     { 
      words = toupper(words); 
     } 

     if((words >= 'A') && (words<='Z')) 
     { 
      typeofletter[words - 'A']++; 
     } 
    } 

    for(i = 0; i < 26; i++) 
    { 
     if(typeofletter[i] != 0) 
     { 
      printf("%c occurs %d times \n", i + 'A', typeofletter[i]); 
     } 
    } 
} 
+1

調用字符的單詞是非常該死的混亂。 – zubergu

+1

嘗試將'typeofletter'數組初始化爲0. 'int typeofletter [26] = {0}' – GoldRoger

+1

您不檢查fopen的返回情況,因此您不知道是否實際打開了該文件。其次,你認爲fscanf在你的第二個循環中從哪裏讀取? – Asthor

回答

1

嘗試初始化typeofletter陣列0 int typeofletter[26] = {0} - GoldRoger

其次,如果你認爲的fscanf進行從你的第二個循環讀取? 如果你通過文件fscanf直到你打到EOF,你下次打電話給EOF時會怎麼想?您需要重新設置您想要從頭開始的文件中正在閱讀的文件。 - Asthor

相關問題