亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請幫幫我,到底是為什么,很不理解?問題在倒數第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 關注
  • 1157 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號