看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Windows NT 問題(Question): 如果在一個程式裡 只打上一行printf("%d %d", 4*atan(1), sin(4*atan(1))); 我的執行結果會很奇怪,如下: 1413754136 1074340347 但是如果把第一個 %d 改成了 %g printf("%g %d", 4*atan(1), sin(4*atan(1))); 答案竟然變成了我想要的 3.14159 0 第一個答案怎樣我不管, 我的問題是第二個,它的輸出型態都是 %d 但為什麼第一次跟第二次的執行結果不一樣呢?? 特別說一下,我沒有宣告任何的暫存變數, 程式碼就僅僅只有這兩行和標頭檔而已... 這問題實在讓在下百思不得其解... 有勞板上的大大們解惑!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.250.221
ibmibmibm:sin跟atan的回傳值是double型態 11/07 03:11
LPH66:基本上你只要知道樓上的原因就行了 11/07 03:38
LPH66:要細講為什麼出來的值是這鬼玩意要花上一大篇 11/07 03:38
xatier:看一下 %d 和 %g 的差別吧 11/07 04:00
littleshan:printf 的型態不符合是 undefined behavior 11/07 10:45
感謝你們熱情的回應, 可是我第二次的第二個值印的仍然維持%d沒有變動啊.... 為什麼他可以印出"0"來呢?? 這點還是沒有被回應到 ... 謝謝你們 !!! ※ 編輯: zebraseven 來自: 140.112.250.221 (11/07 12:55)
chchwy:就是"未定義行為" 所以出了一些怪事也很正常 11/07 13:13
littleshan:undefined behavior→可以發生任何事,包括印出0 11/07 14:49
azureblaze:也可以把你的硬碟format掉或實現三個願望 11/07 23:40
xatier:也可以召喚超哥幫你 debug XD 11/08 00:54
OppOops:所以正解是呼叫printf 兩次嗎?? 11/08 01:03
angleevil:正解是呼叫超哥幫忙寫作業 11/08 08:40