#include <stdio.h>
int main(void)
{
char letter;
printf("please input the first of someday.\n");
while ((letter=getchar())!='y')
{
switch (letter)
{
case 's':printf("please input second letter\n");
if ((letter = getchar()) == 'a')
printf("saturday!\n");
else if ((letter = getchar()) == 'u')
printf("sunday!\n");
else
printf("data error\n");
break;
case 'f':printf("friday!\n"); break;
case 'm':printf("monday!\n"); break;
case 't':printf("please input second letter\n");
if ((letter = getchar()) == 'u')
printf("tuesday!\n");
else if ((letter = getchar()) == 'h')
printf("thursday!\n");
else
printf("data error!\n");
break;
case 'w':printf("wednesday!\n"); break;
//default:printf("data error!\n");
}
}
return 0;
}
因为你输入了字符之后按了回车换行了,getchar()会读取换行符‘\n’,
第一次使用getchar()在读取了s之后,输入缓存里就残留了一个‘\n’。
第二次使用getchar()是读取上一行缓存里残留的换行符‘\n’,不是读取新输入的'a'字符。
可以在 getchar() 之前用 setbuf(stdin, NULL); 清除输入缓存。 或者用getchar() 把缓存里上次残留的‘\n’先读取掉
另外
if ((letter = getchar()) == 'a')
printf("saturday!\n");
else if ((letter = getchar()) == 'u')
printf("sunday!\n");
两个if 中都用(letter = getchar()) 等于连续读取了两个字符,应该是在if前面只用一个getchar() 读取一个字符,
setbuf(stdin, NULL);// 清除输入缓存
letter = getchar();
if (letter == 'a')
printf("saturday!\n");
else if (letter == 'u')
printf("sunday!\n");
你题目的解答代码如下:
#include <stdio.h>
int main(void)
{
char letter;
printf("please input the first of someday.\n");
while ((letter = getchar()) != 'y')
{
switch (letter)
{
case 's':
printf("please input second letter\n");
setbuf(stdin, NULL);// 清除输入缓存
letter = getchar();
if (letter == 'a')
printf("saturday!\n");
else if (letter == 'u')
printf("sunday!\n");
else
printf("data error\n");
break;
case 'f':
printf("friday!\n");
break;
case 'm':
printf("monday!\n");
break;
case 't':
printf("please input second letter\n");
setbuf(stdin, NULL);// 清除输入缓存
letter = getchar();
if (letter == 'u')
printf("tuesday!\n");
else if (letter == 'h')
printf("thursday!\n");
else
printf("data error!\n");
break;
case 'w':
printf("wednesday!\n");
break;
//default:printf("data error!\n");
}
setbuf(stdin, NULL);// 清除输入缓存
}
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
因为两个字符之间你按了回车键,实际地歌词getchar接收的是换行符,不是第二个输入字符
如果你每个getchar()后面都按了回车键,那么你需要接着加一句getchar()来接收掉换行符,这样后续的getchar才能正确接收到下一个有效字符