2012-03-25 22 views
-2
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int i; 
    int counter=0, counter2=0; 
    char *s; 
    char name[30]; 
    char vowel[6] = "AEIOU"; 
    char consonants[21] = "BCDFGHJKLMNPQRSTVWXYZ"; 

    printf ("input the string: "); 
    scanf ("%s", name); 
    printf ("The string is %s\n", name); 
    for (i=0; name[i]!='\0'; i++) { 
    if (s = strchr(vowel, name[i])) { 
     counter++; 
    } 
    else if (s =strchr(consonants, name[i])) { 
     counter2++; 
    } 
    printf ("First counter is %d\n", counter); 
    printf ("The second counter is %d\n", counter2); 
    return 0; 
    } 
} 

問題是,我的代碼有什麼問題?爲什麼櫃檯不工作? 因爲我嘗試了很多方法,沒有任何工作,也許有人可以爲我解釋。我想找到在我的字符串中有多少元音和輔音C

+0

您可能會添加程序失敗的方式 - 是否打印任何內容?它打印什麼? – nietaki 2012-03-25 23:20:53

+4

這與您之前的問題有何不同? http://stackoverflow.com/questions/9864558/stack-with-finding-character-inside-string-in-c-language – 2012-03-25 23:21:27

+3

請在將來,縮進你的代碼。它可以幫助你,它可以幫助閱讀你的代碼的人(包括你的老師)。 – 2012-03-25 23:22:43

回答

10

我已經將縮進添加到您的代碼中,通過這樣做,您的問題變得非常明顯,即您的返回和打印語句位於for循環中。他們應該在循環之外。

4

除了}{佈局問題,consonants[21]應該是consonants[22]。一種更安全的方法是使用consonants[] - 編譯器會爲你計算字符數。

2

的最後三個行是:

return 0; 
    } 
} 

,但應該是:

} 
    return 0; 
} 

課:縮進是非常重要的。

0

不要使用scanf讀取一個任意長度的字符串:

#XXX never do that 
char name[30]; 
scanf("%s", name); 

如果輸入大於指定的大小然後bad things可能發生諸如正在執行任意代碼。

你可以使用fgets代替:

char buf[BUFSIZ]; 
while (fgets(buf, sizeof(buf), stdin)) { 
    // buf contains a line or part of it; 
    // long lines are spread among multiple chunks 
    process_chunk(buf); 
} 

if (!feof(stdin)) 
    ; // error 

這應該是一個評論;我已經發布它作爲包含代碼示例的答案。

2

首先,英語字母表中有21個輔音,所以你的數組應該是22個元素長(以適應終止'\ 0'字符)。

其次,你根本不需要測試輔音,因爲如果它不是元音,它就是一個輔音。所以你可以通過完全刪除輔音數組來清理它,並簡單地使用else語句,而不是冗餘地檢查你的數組中的輔音。

第三,您是否打算爲每個字母的名稱打印每個櫃檯的價值?這似乎很奇怪。 另外,你應該只返回一次。目前你只經過一次循環,然後從main返回。這是不正確的......你應該把你的for循環之外的printf和return語句都移出來。這就是我得到的......如果你做出這些修復,你的代碼應該運行。

0

很好用strchr!我最喜歡的功能之一是string.h。儘管有一些注意事項:

  1. 您只檢查大寫字符。看看toupper()將測試字符轉換爲大寫,然後再將其與元音列表進行比較。

  2. 如果一個字符是一個字母,它不是元音,那麼它是一個輔音。不要爲輔音建立單獨的陣列,請參閱isalpha()函數,並考慮如何將它合併到您的程序中,而不是第二次調用strchr()。現在,您不必擔心忘記輔音列表中的字符!

相關問題