搜索
查看: 1348|回复: 6
打印 上一主题 下一主题

关于switch的问题,为什么第2次我不能输入answer2

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-11 18:18:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{        char answer1,answer2;
        printf("A 1right    B 1wrong  ");
    scanf("%c",&answer1);
    switch(answer1)
    {
    case 'a':
    case 'A':
                printf("1right\n");break;
    case 'b':
    case 'B':
                printf("1wrong\n");break;
    default:
                printf("1wrong\n");break;
    }



    /*第2次*/


        printf("A 2right   B 2wrong  ");
    scanf("%c",&answer2);
    switch(answer2)
    {
    case 'a':
    case 'A':
                printf("2right\n");break;
    case 'b':
    case 'B':
                printf("2wrong\n");break;
    default:
                printf("2wrong\n");break;
    }
        system("pause");
        return 0;
}


最佳答案

查看完整内容

第一种 在所有scanf之后加上 也可以(仅微软的运行库支持,不可移植)第二种方法所有的scanf不要用%c读取,换成
沙发
发表于 2013-8-11 18:18:42 | 只看该作者
qq401814074 发表于 2013-8-11 19:09
具体怎么做捏

第一种
在所有scanf之后加上
while(getchar() != '\n')
    ;


也可以(仅微软的运行库支持,不可移植)
  1. fflush(stdin);
  2. /* msvcrt ONLY */
复制代码
第二种方法
  1. char buf[10];
复制代码
所有的scanf不要用%c读取,换成
  1. scanf("%9s", buf);

  2. if(buf[0] == 'A' || buf[0] == 'a')
  3. /* code here */
复制代码
板凳
发表于 2013-8-11 18:57:22 | 只看该作者
因为answer2读取了缓冲区残留的字符(回车)
你可以选择在一次读取后清空缓冲区,或者是scanf读取一个短字符串(读取字符串会自动跳过空白字符),然后再读取字符串的第一个字符
地板
 楼主| 发表于 2013-8-11 18:59:30 | 只看该作者
具体怎么做捏
5#
 楼主| 发表于 2013-8-11 19:09:17 | 只看该作者
rosynirvana 发表于 2013-8-11 18:57
因为answer2读取了缓冲区残留的字符(回车)
你可以选择在一次读取后清空缓冲区,或者是scanf读取一个短字 ...

具体怎么做捏
6#
发表于 2013-8-11 21:00:17 | 只看该作者
{:soso_e129:}
7#
 楼主| 发表于 2013-8-11 21:13:45 | 只看该作者
rosynirvana 发表于 2013-8-11 20:25
第一种
在所有scanf之后加上

thank you ..,very much much much
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表