首页 > 解决方案 > 在接受用户输入时,我们如何在 c 编程中忽略按回车键作为字符?

问题描述

看例子:

#include<stdio.h>
int main()
{
    char ch;
    while(scanf("%c", &ch))
    {
        if(ch == 'a' || ch == 'e' || ch == 'i' ||
                ch == 'o' || ch == 'u' || ch == 'A' ||
                ch == 'E' || ch == 'I' || ch == 'O' ||
                ch == 'U')
        {
            printf("It's Vowel\n");
        }
        else if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
        {
            printf("It's Consonant\n");
        }
        else
        {
            printf("Wrong Input/ It's not Alphabet\n");
        }
    }
    return 0;
}

编译此示例代码后,当我输入“a”时,输出为“It's Vowel”和“Wrong Input/It's not Alphabet”。我认为导致此输出的原因是,编译器将字符也视为字符。

有没有办法解决这个问题?

标签: cinputwhile-loop

解决方案


我认为导致此输出的原因是,编译器将字符也视为字符。

接受字符的不是编译器。获取输入是一个运行时操作。当程序已经运行时,编译器的工作已经完成,但除此之外,您的猜测是正确的。这是因为在第一步scanf()中不使用按制作的换行符。Enter

这个换行符然后在下一次迭代中被读取,scanf("%c", &ch))因为换行符是一个合法的字符,它存储在ch.

有没有办法解决这个问题?

利用

while(scanf(" %c", &ch))

代替

while(scanf("%c", &ch))

注意前面的空白字符 ( ' ') %cstdin这将获取上次迭代中留下的废弃换行符。


推荐阅读