黑马程序员技术交流社区

标题: scanf函数不能阻断代码运行了,悲了个剧,求解答 [打印本页]

作者: 大路朝天    时间: 2015-4-12 13:35
标题: scanf函数不能阻断代码运行了,悲了个剧,求解答
本帖最后由 大路朝天 于 2015-4-12 13:38 编辑

出现的问题是scanf函数不能阻断代码运行,没让我输入就执行接下来的语句了。部分代码如下:
   
    //定义变量
    double x,pay=0;
    char a='a',b='b',c='c',z,y,f='f',m='m',e='e';
    //提示用户输入,并接受数据
    printf("请选择油品:'a'(6.92元/公升) 'b'(7.37元/公升) 'c'(7.64元/公升)\n");
    scanf("%c",&y);
    //判断输入合法性
    if (y!='a' && y!='b' && y!='c') {
        printf("你的语文是体育老师教的吧!\n");
        return 0;
    }else {
        printf("请输入您要加的油量(公升):\n");
        scanf("%lf",&x);
        
        //判断输入合法性
        if (x<=0) {
            printf("你个逗比,还能不能愉快的玩耍了!\n");
            return 0;
        }else {
            printf("请选择服务等级:\n'f'—自动加(无优惠)'m'—自己加(优惠5%)'e'—协助加(优惠10%)\n");
            scanf("%c",&z);
            printf("输入内容是%c\n",z);
作者: 距离    时间: 2015-4-12 13:48
是第一个SCANF么?
作者: 大路朝天    时间: 2015-4-12 14:05
距离 发表于 2015-4-12 13:48
是第一个SCANF么?

不是,代码的倒数第二行的scanf
作者: 枫宇翔    时间: 2015-4-12 14:08
你是不是第一次输入能成功,然后按了 回车,就直接输入了一个空字符
作者: 赵俊腾    时间: 2015-4-12 14:32
scanf("%c",&z);
我也想知道为什么

作者: 赵俊腾    时间: 2015-4-12 14:34
本帖最后由 赵俊腾 于 2015-4-12 14:44 编辑

前面加上这句看看rewind(stdin);
或第2个scanf改成 scanf("%lf%*c",&x);

作者: 从黑夜直至白天    时间: 2015-4-12 14:39
请在第二句SCANF添加 %*c即可
由于上面你输入了服务等级使用了分隔符
所以需要跳过,否则会接受,直接结束SCANF
作者: 大路朝天    时间: 2015-4-12 14:41
枫宇翔 发表于 2015-4-12 14:08
你是不是第一次输入能成功,然后按了 回车,就直接输入了一个空字符

没有空字符啊
作者: 大路朝天    时间: 2015-4-12 14:46
赵俊腾 发表于 2015-4-12 14:34
前面加上这句看看rewind(stdin);
或第2个scanf改成 scanf("%lf%*c",&x);

卧槽,加了就可以了,感谢
作者: 大路朝天    时间: 2015-4-12 14:48
从黑夜直至白天 发表于 2015-4-12 14:39
请在第二句SCANF添加 %*c即可
由于上面你输入了服务等级使用了分隔符
所以需要跳过,否则会接受,直接结束S ...

%*c,已测试不行,正确办法确实是先清空输入区缓存




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