当输入第二个字母时显示的不正确,比如输入s后在输入a不显示Saturday,想了半天找不出原因

#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;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

因为两个字符之间你按了回车键,实际地歌词getchar接收的是换行符,不是第二个输入字符
如果你每个getchar()后面都按了回车键,那么你需要接着加一句getchar()来接收掉换行符,这样后续的getchar才能正确接收到下一个有效字符

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632