[問題] 關於printf的問題

看板C_and_CPP作者 (Die walkuere)時間13年前 (2011/11/06 19:07), 編輯推噓5(506)
留言11則, 8人參與, 最新討論串1/2 (看更多)
開發平台(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

11/07 03:11, , 1F
sin跟atan的回傳值是double型態
11/07 03:11, 1F

11/07 03:38, , 2F
基本上你只要知道樓上的原因就行了
11/07 03:38, 2F

11/07 03:38, , 3F
要細講為什麼出來的值是這鬼玩意要花上一大篇
11/07 03:38, 3F

11/07 04:00, , 4F
看一下 %d 和 %g 的差別吧
11/07 04:00, 4F

11/07 10:45, , 5F
printf 的型態不符合是 undefined behavior
11/07 10:45, 5F
感謝你們熱情的回應, 可是我第二次的第二個值印的仍然維持%d沒有變動啊.... 為什麼他可以印出"0"來呢?? 這點還是沒有被回應到 ... 謝謝你們 !!! ※ 編輯: zebraseven 來自: 140.112.250.221 (11/07 12:55)

11/07 13:13, , 6F
就是"未定義行為" 所以出了一些怪事也很正常
11/07 13:13, 6F

11/07 14:49, , 7F
undefined behavior→可以發生任何事,包括印出0
11/07 14:49, 7F

11/07 23:40, , 8F
也可以把你的硬碟format掉或實現三個願望
11/07 23:40, 8F

11/08 00:54, , 9F
也可以召喚超哥幫你 debug XD
11/08 00:54, 9F

11/08 01:03, , 10F
所以正解是呼叫printf 兩次嗎??
11/08 01:03, 10F

11/08 08:40, , 11F
正解是呼叫超哥幫忙寫作業
11/08 08:40, 11F
文章代碼(AID): #1EjjhRSj (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EjjhRSj (C_and_CPP)