猿问

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

#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;
}

黑丶雨
浏览 1124回答 1
1回答

onemoo

因为你输入的内容都是存入输入缓冲区中的,而%c匹配会匹配任何一个字符(包括回车)。你在前一个scanf("%f",&number)时,输入结束后会打一个回车吧,但这个回车不会被scanf读走,会留在缓冲区中。再执行scanf(" %c",&a); 时,由于是匹配字符,所以这个scanf会读到上次剩下的那个'\n' ,并存入a中。为了避免这个问题,就在匹配格式前加一个空格。 scanf会把格式化指示中的空格视为任意一个或多个空白符号(包括空格、回车、tab等),所以这样就能“消耗掉”上次剩下的那个空格。  在连续调用scanf时,这是一种常见的解决办法!
随时随地看视频慕课网APP
我要回答