#include <stdio.h>int main(){????char a;?? ?float price = 5.0f;?? ?float number;?? ?A:?? ?printf("請輸入要購買的數(shù)量(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就不執(zhí)行 ,為什么?。??? ?if(a=='y')?? ?goto A;?? ?return 0;}
1 回答
已采納

onemoo
TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊
因為你輸入的內(nèi)容都是存入輸入緩沖區(qū)中的,而%c匹配會匹配任何一個字符(包括回車)。
你在前一個scanf("%f",&number)時,輸入結(jié)束后會打一個回車吧,但這個回車不會被scanf讀走,會留在緩沖區(qū)中。
再執(zhí)行scanf(" %c",&a); 時,由于是匹配字符,所以這個scanf會讀到上次剩下的那個'\n' ,并存入a中。
為了避免這個問題,就在匹配格式前加一個空格。 scanf會把格式化指示中的空格視為任意一個或多個空白符號(包括空格、回車、tab等),所以這樣就能“消耗掉”上次剩下的那個空格。 ?在連續(xù)調(diào)用scanf時,這是一種常見的解決辦法!
- 1 回答
- 1 關(guān)注
- 1155 瀏覽
添加回答
舉報
0/150
提交
取消