Re: [鋼彈] 單班計程2-1

看板b96902HW作者 (人.魔.姊.浴)時間16年前 (2007/10/16 10:51), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《ohlar (歐拉)》之銘言: : 請問一下 : 為什麼我用while( (scanf("%c%d%d",&x,&i,&h))!= EOF ){ 寫 : 要按三次^Z才可以把程式終止呢? : 有別的辦法可以按一次就讓他停下來嗎? : 搞了很久還是沒分數@@ 你所輸入的東西(包含最後按下的換行符號)都會先丟到一塊記憶體緩衝區當中 而 scanf 會接著從這塊緩衝區依照你所給他的格式讀出來 不過依照 scanf 的定義,他是有可能沒有讀滿你所給他的變數數量就 return 你所用的 format string 就會造成這樣的問題 至於為什麼會發生這樣的問題呢? 假設我輸入了 "A 2 3[換行符號]" 第一次 scanf 會把 A 2 3 分別丟給 x i h 可是這時候緩衝區當中還有個 [換行符號] 第二次進入 scanf 的時候他就會先讀進 [換行符號] 給 x,而 i h 會被忽略 這不算是 bug 而是 scanf 本身就是這樣運作 format string 第一個要求讀入的是字元 scanf 認為 [換行符號] 符合這樣的要求所以就讀進來了 如果你看 manual 的話,scanf 會 return 讀入的變數個數 只有在緩衝區 eof 的狀況下才會回傳 EOF 解決辦法有很多 其中一個是你的 format string 寫成 "%d%d%d" -- Tachikoma*3:「One、Two、Three,(興奮)少佐好豐滿啊 (比劃)Bust and HipBust and HipBust and Hip。」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.91.4 ※ 編輯: mifan 來自: 140.112.91.4 (10/16 10:52)

10/16 12:09, , 1F
唔..我說的bug和這個無關...那是兩次^Z的原因
10/16 12:09, 1F
文章代碼(AID): #1752SlE9 (b96902HW)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1752SlE9 (b96902HW)