![](/img/trans.png)
[英]Why does printf output random values for double and 0.000000 for int?
[英]Why does printf(“value: %f”,10/2); output 0.000000?
我知道整數算術將截斷分數,但在這里它至少應打印5。為什么打印0.000000
?
調用printf
具有未定義的行為,因為轉換說明符%f
與表達式10 / 2
的類型int
。 作為表達的兩個操作數10 / 2
具有類型int
,結果具有類型int
,因為它是兩個操作數的常見的類型。
至少使用10.0 / 2
。 在這種情況下,表達式的類型為double
。
或輸出的整數表達式10 /2
使用轉換符%d
或%i
喜歡
printf( "value: %d", 10 / 2 );
根據C標准(7.21.6.1 fprintf函數)
9如果轉換說明無效,則行為未定義。275) 如果任何參數不是對應轉換說明的正確類型,則行為未定義 。
10
和2
不是有效的float
。 它們是int
。
要使程序打印正確的輸出,請執行以下操作:
printf("value:%f",10./2.);
請注意.
每個數字之后。 這向編譯器表示該數字是浮點數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.