黑马程序员技术交流社区

标题: 老师讲的案例,default中添加printf语句后.... [打印本页]

作者: 洋柿子    时间: 2015-6-21 13:38
标题: 老师讲的案例,default中添加printf语句后....
本帖最后由 洋柿子 于 2015-6-21 16:25 编辑

default中添加printf语句后,输入w,a,s,d,得到是"上,呵呵",若输入非w,a,s,d的字符,输出两个呵呵.老师当时default,直接break结束了,是没有输出项的.问题出在哪里啊
int main(int argc, const char * argv[]) {
   
    //定义变量
    char direction;
    printf("请控制小人移动: w.上  s.下  a.左  d.右  q.退出\n");
    //写一个死循环
    int flag = 1;
    while (flag) {
        
        
        //     让玩家输入方法,如果玩家不输入方向系统会一直等待
        scanf("%c",&direction);
        
        //     w 上    s 下   a 左   d 右  q退出
        // W       S     A      D
        switch (direction) {
            case 'w':
            case 'W':
                printf("上\n");
                break;
            case 's':
            case 'S':
                printf("下\n");
                break;
            case 'a':
            case 'A':
                printf("左\n");
                break;
            case 'd':
            case 'D':
                printf("右\n");
                break;
            case 'q':
            case 'Q':
                printf("程序正在退出...\n");
                printf("程序已经退出.\n");
                flag = 0;
                break;
            default:
                printf("呵呵");break;
        }
        
        
    }
   
    //垃圾回收
   
   

}
作者: lipeng524824    时间: 2015-6-21 16:26
是啊 的确是个问题
作者: zilin    时间: 2015-6-21 16:33
帅哥啥意思,没听懂。
作者: 洋柿子    时间: 2015-6-21 16:37
zilin 发表于 2015-6-21 16:33
帅哥啥意思,没听懂。

你把代码复制下,运行下,输入w,a,s,d试试啊.困惑啊
作者: 洋柿子    时间: 2015-6-21 16:45
zilin 发表于 2015-6-21 16:33
帅哥啥意思,没听懂。

你把代码复制下,运行下,输入w,a,s,d试试啊.困惑啊
作者: zilin    时间: 2015-6-21 17:09
回车吧,然后default 呵呵
作者: 丁铭检    时间: 2015-6-21 17:48
本帖最后由 丁铭检 于 2015-6-21 17:58 编辑

我运行的结果是这样的。。

360截图20150621175840504.jpg (16.11 KB, 下载次数: 26)

360截图20150621175840504.jpg

作者: 弹剑    时间: 2015-6-21 18:57
把回车作为一个其它字符接收了.
在scanf函数%c后添加一个%*c跳过即可.
作者: fixer    时间: 2015-6-21 19:43
吸收一下回车
作者: kalon    时间: 2015-6-22 09:34
怎么解决的?
作者: aludiba    时间: 2015-6-22 10:27
弹剑 发表于 2015-6-21 18:57
把回车作为一个其它字符接收了.
在scanf函数%c后添加一个%*c跳过即可.

原来如此
作者: 洋柿子    时间: 2015-6-24 12:52
弹剑 发表于 2015-6-21 18:57
把回车作为一个其它字符接收了.
在scanf函数%c后添加一个%*c跳过即可.

解决了我的问题..谢谢
作者: 洋柿子    时间: 2015-6-24 12:53
kalon 发表于 2015-6-22 09:34
怎么解决的?

scanf("%c%*c",&direction);就ok了,老师的default直接没有打印内容.




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