我正在嘗試獲取元音的數量,但大多數時候它會列印出錯誤的數字,例如我輸入了“ccc”但得到了“元音 = 2”?我到底做錯了什么?
#include <stdio.h>
int main()
{
char word[20];
int vowel=0;
puts("enter word to check number of vowels");
fgets(word,sizeof(word),stdin);
for (int character=0;character<sizeof(word);character )
{
if (word[character]=='a'||word[character]=='e'||
word[character]=='i'||word[character]=='o'||
word[character]=='u'||word[character]=='A'||
word[character]=='E'||word[character]=='I'||
word[character]=='O'||word[character]=='U')
vowel ;
}
printf("vowels=%d",vowel);
}
uj5u.com熱心網友回復:
您使用錯誤的方法來獲取字串的長度。 sizeof(word)是整個緩沖區的位元組大小。但是,fgets沒有初始化所有這些值,因此您有未定義的行為。
使用strlen(word)得到一個字串的長度。
請注意,您還可以簡化元音測驗:
if (strchr("aeiouAEIOU", word[character])) vowel ;
uj5u.com熱心網友回復:
不是迭代到緩沖區的大小,而是迭代到輸入字串的末尾。無需呼叫strlen(),只需查找空字符即可。
// for (int character=0;character<sizeof(word);character )
for (int character=0; word[character]; character )
測驗fgets()結果以確保讀取了某些內容。 當未讀取任何內容或輸入錯誤時fgets()回傳NULL。
// fgets(word,sizeof(word),stdin);
if (fgets(word, sizeof word, stdin)) {
for (int character=0; word[character]; character )
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380855.html
