c语言里关于switch的问题(输入星期)

c语言里关于switch的问题
这个问题要从getchar()这个函数入手,getchar 由宏实现:#define getchar() fgetc(stdin)getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).
就是说你输入T+Enter的时候,第一个,也就是while循环里的getchar()读到了T,进入if中的getchar,而你输入的Enter保存在缓冲区中,直接就被这个getchar读取了,所以判断结果永远是非,当然不可能打印Tuesday,不明白的话你在提示“请输入首字母”的时候随便输一个符合default的值,会打印两个请重新输入,输入两个,则会打印三个,这就说明你一次输入多个,下次调用getchar的时候会直接读缓冲区里存储的数据,知道读完才会让你再次输入。

解决方法如下:

#include<stdio.h>
#include <stdbool.h>  
#include<ctype.h>
int main() {
    char letter,i;
    scanf(" %c", &letter);
//letter = toupper(letter);//将字母转化为对应的大写字母 ctype.h
//fflush(stdin);//可以在这儿加一个强制键盘缓冲区清空处理,用以清空输入最后所带的回车
    switch (letter)
    {
        case 'M':printf("星期一\n"); break;
        case 'W':printf("星期三\n"); break;
        case 'F':printf("星期五\n"); break;
        case 'T':printf("输入第二个字母:(u/h)\n");
        //if ((letter = getchar()) == 'u')  printf("星期二\n");
            scanf(" %c", &i);
            if (i == 'h')  printf("星期四\n");
        else if (i =='u') printf("星期二\n");
        else printf("数据错误\n");
        break;

    case 'S':printf("输入第二个字母:(a/u)\n");
        scanf(" %c", &i);
        if (i == 'a')

            printf("星期六\n");
        else if (i == 'u')
            printf("星期天\n");
        else
            printf("数据错误\n");
        break;

    default:printf("数据错误\n");
}
//fflush(stdin);//这儿加一个强制键盘缓冲区清空处理,用以清空case语句里输入时最后所带的回车
    return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值