弯曲的线条 2022-04-12 15:42 采纳率: 100%
浏览 27
已结题

当输入第二个字母时显示的不正确,比如输入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;
}

  • 写回答

3条回答 默认 最新

  • 关注

    因为你输入了字符之后按了回车换行了,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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么