无法读取for循环中的所有字符(使用getchar)

无法读取for循环中的所有字符(使用getchar),c,C,代码: //程序来查找不存在的元音 #include<stdio.h> int main() { int count;char letter;int vowel=0; for(count=0;count<10;count++) { letter=getchar(); switch(letter) { case 'a': case 'e':

代码: //程序来查找不存在的元音

#include<stdio.h>
int main()
{
    int count;char letter;int vowel=0;
    for(count=0;count<10;count++)
    {
        letter=getchar();
        switch(letter)
        {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':vowel++;
        }printf("Count:%d",count);
    }
    printf("NO of vowels is %d\n",vowel);

return 0;
}
#包括
int main()
{
整数计数;字符字母;整数元音=0;

for(count=0;countSpace
'
也是一个字符。
getchar
一次读取一个字符,因此也读取
'
。从输入中删除空格。

我很惊讶您没有从
printf中注意到(“计数:%d\n”);
行,每输入一个字母的计数增加两个。
getChar
函数从输入文本中获取所有字符,包括空格和换行符。使程序按预期运行的最简单方法是将最大计数增加到20:

for(count = 0; count < 20; count++)
{
    letter = getchar();
    // ...
for(计数=0;计数<20;计数++)
{
letter=getchar();
// ...
替代方法包括使用scanf和检查是否到达文本输入的末尾,但是您的实现要安全得多。

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

int main(){
    int count=0, vowel=0;
    char letter;
    while(count < 10){
        letter=getchar();
        if(isgraph(letter)){
            switch(tolower(letter)) {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':vowel++;
            }
            ++count;//Counting only the case of the display characters that are not blank
        }
    }
    printf("NO of vowels is %d\n",vowel);

    return 0;
}
#包括 int main(){ int计数=0,元音=0; 字符字母; 同时(计数<10){ letter=getchar(); if(图形(字母)){ 开关(tolower(字母)){ 案例“a”: 案例“e”: 案例“i”: 案例“o”: 大小写“u”:元音++; } ++count;//仅计算非空显示字符的大小写 } } printf(“元音的数量为%d\n”,元音); 返回0; }
getChar
也会获取空格。如果按enter按钮输入每个字符,则enter code会被放入缓冲区,并在每秒钟的循环中读取。也许用20而不是10不好?因为新行可以有两个字符,然后从标准输入读取时应该使用30。最好使用getch或chang之类的东西e terminal BehaviorNewline是一个字符,
'\n'
。但是文件可能有其他空格。不要猜测20或30之类的数字,只在读取非空格时增加计数器。