为了账号安全,请及时绑定邮箱和手机立即绑定

请帮帮我,到底是为什么,很不理解?问题在倒数第5行

请帮帮我,到底是为什么,很不理解?问题在倒数第5行

C
黑丶雨 2016-06-21 16:28:07
#include <stdio.h>int main(){    char a;    float price = 5.0f;    float number;    A:    printf("请输入要购买的数量(30件以上打9折,50件以上打8.5折): ");    scanf("%f",&number);    printf("您一共要购买%.2f件,总价为:%.2f。\n",number,number*price*(number > 50 ? 0.85 : (number > 30 ? 0.9 : 1)));    printf("需要再次购买吗?(y 或 n)\n");    scanf(" %c",&a);              //%c前不加空格if就不执行 ,为什么啊?     if(a=='y')    goto A;    return 0;}
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

因为你输入的内容都是存入输入缓冲区中的,而%c匹配会匹配任何一个字符(包括回车)。

你在前一个scanf("%f",&number)时,输入结束后会打一个回车吧,但这个回车不会被scanf读走,会留在缓冲区中。

再执行scanf(" %c",&a); 时,由于是匹配字符,所以这个scanf会读到上次剩下的那个'\n' ,并存入a中。

为了避免这个问题,就在匹配格式前加一个空格。 scanf会把格式化指示中的空格视为任意一个或多个空白符号(包括空格、回车、tab等),所以这样就能“消耗掉”上次剩下的那个空格。  在连续调用scanf时,这是一种常见的解决办法!

查看完整回答
1 反对 回复 2016-06-22
  • 1 回答
  • 1 关注
  • 1123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信