黑马程序员技术交流社区

标题: 关于switch语句 [打印本页]

作者: 堕落天使    时间: 2015-9-8 08:28
标题: 关于switch语句

代码如下:
#include <stdio.h>

int main(int argc, const char * argv[]) {
    char week,week1;
    printf("输入一个字母!\n");
    scanf("%c",&week);
    switch (week) {
        case 'M':
            printf("周一");
            break;
        case 'W':
            printf("周三");
            break;
        case 'F':
            printf("周五");
            break;
        case 'T':
        {   printf("再输入一个字母\n");
            scanf("%c",&week1);
            switch (week1) {
                case 'u':
                    printf("周二");
                    break;
                case 'h':
                    printf("周四");
                    break;

                default:
                    break;
        }
            }


        default:
            break;
    }


    return 0;
}

为什么输入T的时候,case T下的语句无法执行啊。

作者: jsh_513    时间: 2015-9-8 09:45
大神,你的这个为题解决了吗?为什么输入T的时候,case T下的语句无法执行啊??求告知
作者: lionheartism    时间: 2015-9-8 09:50
caseT下的并不是没有执行,而是scanf的运行原理,因为你在前面输入的时候是T和回车,那么当T被从输入流中读取出来的时候,缓冲区内还是有‘\n’这个符号存在的,scanf在输入流不为空是是直接读取不要求用户输入的,所以你输入了T敲了回车,week1的值在scanf执行后变为'\n'没有匹配的所以就运行结束了。你在week1的scanf前加入char c;while ((c = getchar()) != '\n' && c != EOF);来清空输入缓冲区就可以了。或者在scanf的时候避开回车scanf("\n%c", &week1);都是可以的
作者: aidan    时间: 2015-9-8 10:22
楼上说得有道理。
作者: 堕落天使    时间: 2015-9-8 12:14
jsh_513 发表于 2015-9-8 09:45
大神,你的这个为题解决了吗?为什么输入T的时候,case T下的语句无法执行啊??求告知 ...

问题已经解决,我写了完整地代码
帖子的地址
switch语句实现判断星期几代码
http://bbs.itheima.com/thread-236098-1-1.html
(出处: 黑马程序员IT技术论坛)

作者: 堕落天使    时间: 2015-9-8 12:15
lionheartism 发表于 2015-9-8 09:50
caseT下的并不是没有执行,而是scanf的运行原理,因为你在前面输入的时候是T和回车,那么当T被从输入流中读 ...

多谢,问题已经解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2