A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大路朝天 于 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);

9 个回复

倒序浏览
是第一个SCANF么?
回复 使用道具 举报
距离 发表于 2015-4-12 13:48
是第一个SCANF么?

不是,代码的倒数第二行的scanf
回复 使用道具 举报
你是不是第一次输入能成功,然后按了 回车,就直接输入了一个空字符
回复 使用道具 举报
scanf("%c",&z);
我也想知道为什么
回复 使用道具 举报
本帖最后由 赵俊腾 于 2015-4-12 14:44 编辑

前面加上这句看看rewind(stdin);
或第2个scanf改成 scanf("%lf%*c",&x);
回复 使用道具 举报
请在第二句SCANF添加 %*c即可
由于上面你输入了服务等级使用了分隔符
所以需要跳过,否则会接受,直接结束SCANF
回复 使用道具 举报
枫宇翔 发表于 2015-4-12 14:08
你是不是第一次输入能成功,然后按了 回车,就直接输入了一个空字符

没有空字符啊
回复 使用道具 举报
赵俊腾 发表于 2015-4-12 14:34
前面加上这句看看rewind(stdin);
或第2个scanf改成 scanf("%lf%*c",&x);

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

%*c,已测试不行,正确办法确实是先清空输入区缓存
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马