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

猜你喜欢

转载自blog.csdn.net/qq_53749266/article/details/115015108