#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 回答
- 1 关注
- 1123 浏览
添加回答
举报
0/150
提交
取消