#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 關注
- 1157 瀏覽
添加回答
舉報
0/150
提交
取消