我一直在写一个简单的程序来检查输入字母是否是元音,而我的代码不起作用。 程序应逐个输入字符作为输入,直到输入%,这将使其退出。它检查输入字符是否为元音,并打印结果。如果输入不是字母,它也会报告错误。 问题是,它在第二步中突破了循环。 提前谢谢你的帮助。 PS对不起,没有写出没有错误消息,它只是突破了循环。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
char processed='q';
while(processed != '%')
{
printf("Enter letter to check if it's a vowel, %% to quit.\n");
char input = getchar();
processed = tolower(input);
printf("%c\n", processed);
if (processed == '%')
break;
if (processed < 'a' || processed > 'z')
{
fprintf(stderr, "Input should be a letter\n");
exit(1);
}
switch(processed)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'y':
printf ("Vowel\n");
break;
default:
printf ("Non-vowel\n");
}
}
exit(0);
}
答案 0 :(得分:5)
据推测,您正在输入一个角色,然后点击[ENTER]。因此,实际上您输入了两个字符 - 您输入的字母和换行符(\n
)。第二次循环你得到换行符并发现它不是一个字母,所以你遇到了错误的情况。也许你想要添加如下内容:
if (processed == '\n') {
continue;
}
答案 1 :(得分:3)
有人提到你在输入的每个字母后输入,然后在你的程序中发送换行符('\ n')。由于你的程序没有处理它的情况,它无法正常工作。
您可以添加代码来处理换行符,但使用scanf会更容易。具体来说,如果你更换了
char indent = getchar();
与
char indent;
scanf("%c\n", &indent);
scanf()将处理换行符并返回您感兴趣的字母。
当然,你应该检查scanf()的错误返回值。