注册 登录
编程论坛 C++教室

一个关于case 匹配的问题,求指点!

tobery 发布于 2012-09-16 19:39, 422 次点击
    int a;
    bool test=0;
    do
    {
        scanf("%d",&a);
        switch(a)
        {
        case 1:printf("a=%d\n",a); test=1; break;
        case 2:printf("a=%d\n",a); test=1; break;
        case 3:printf("a=%d\n",a); test=1; break;
        case 4:printf("a=%d\n",a); test=1; break;
        default: printf("输入错误,请重新输入!\n"); break;
        }
    } while (test==0);
    输入5,6,7,8这类的数会提示输入错误,请重新输入,然后就回到重新输入那里等待输入没错,但如果输入a,b,c,F,G,这类的就会无限打印"输入错误,请重新输入!"这是为什么,数字和字符不都走得是default吗,然后回到输入阿?
4 回复
#2
爱闹的娃2012-09-16 21:21
你在scanf()后面加一个getchar(),就ok了............输入字符a==之类的时候,那是因为在循环外面初始化test=0,当输入的类型有误时,scanf()关闭,但是缓冲区一直没清空,不能输入,test就一直=0,所以就循环输出default这一句.....
#3
tobery2012-09-17 23:13
回复 2楼 爱闹的娃
谢谢了,找了好久都找不出原因呢,C++的基础还是不行啊,要多学习了~
#4
pangding2012-09-18 18:53
以下是引用tobery在2012-9-17 23:13:28的发言:

谢谢了,找了好久都找不出原因呢,C++的基础还是不行啊,要多学习了~

嗯。对于初学者来说确实是一个比较隐晦的问题了。IO 是个比较复杂的主题,错误处理对于初学者来说也比较复杂。
c++ 里一般主张用 cin >> a 和 cout << "string" << endl; 这样的写法。虽然熟悉 c 的人可能会觉得比较麻烦。另外即使这么写,该出错的地方还是会出错。
#5
chongzijiazu2012-09-19 10:45
IO问题挺有趣的
1