我剛開始學習C,因爲我是混合性的scanf和printf,我不小心寫了這樣的代碼:scanf函數與精度指定參數
float loan = 0.0f; // loan
float rate = 0.0f; // monthly interest rate
float mpay = 0.0f; // monthly pay
printf("Enter amount of loan: ");
scanf("%.2f",&loan); // I am supposed to write scanf("%f",&loan), I was trying to take a float input with two digits after point
printf("Enter interest rate: ");
scanf("%.2f",&rate); // similar here
printf("Enter monthly payment: ");
scanf("%.2f",&mpay); // similar here
我預計這一代碼將顯示三個輸入提示功能,每一個會掛起並等待,直到我輸入一些輸入並按回車。但是發生的是,只有第一個提示正在等待我的輸入,然後當我按下回車鍵時,第二個和第三個提示快速顯示,而不等待我的輸入,就好像代碼從別的地方得到了我的輸入。後來,當我檢查三個應該保存三個輸入的變量的值時,沒有一個實際存儲輸入值。
我回到我的C書,並意識到我混合了printf
的最小場和精度參數概念與scanf
的,所以我猜那裏沒有這樣的scanf語法?但如果是這樣的話,爲什麼編譯器會編譯,這是不是說scanf也有這樣的語法呢,還是我錯了?我該如何解釋這種奇怪的行爲,不等待我的第二和第三個輸入,而不是將輸入存儲到三個變量中?
你有沒有打印所有3個scanfs後的值? –
'scanf'不包含浮點數精度的字段。你的代碼不能用gcc編譯,並且當你刪除'.2'時會像你期望的那樣工作。我無法解釋你所得到的行爲。 – eigenchris