爲以下代碼輸入大數字會導致scanf
成功,儘管該值未被正確存儲。scanf成功,但存儲的值對於某些大型浮點數不適用
printf("\nDouble max: %f\n", DBL_MAX);
printf("\nFloat max: %f\n", FLT_MAX);
printf("\nPlease insert root1 data: ");
float input1;
scanResult = scanf("%f", &input1);
printf("\nScan Result is %d\n", scanResult);
double input2;
printf("\nPlease insert root2 data: ");
scanResult = scanf("%lf", &input2);
printf("\nScan Result is %d\n", scanResult);
printf("%f", input1);
printf("%f", input2);
輸出:
Double max: 17976931348623157000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000
0.000000
Float max: 340282346638528860000000000000000000000.000000
Please insert root1 data: 1872389723948273985723984756982375698374568
Scan Result is 1
Please insert root2 data: 928734812348721834.2348275
Scan Result is 1
1.#INF00
928734812348721790.000000
所以我的問題是:
首先掃描:爲什麼
scanf
還是要說的掃描結果爲1,當你可以看到,價值存儲不正確?第二次掃描:爲什麼它會舍入它,我該如何解決它?
一般:我們可以看到,通過0的數量,該和
FLT_MAX
比我給的輸入大得多。那爲什麼它不正確地存儲輸入?
您需要更好的'c'書籍(或網站) – KevinDTimm
@KevinDTimm我可以理解爲什麼嗎? –
對於scanf()有關溢出處理的有趣問題+1。這不僅抵消了你不努力驗證你的輸入;-)。 –