Re: [鋼彈] 單班計程2-1
※ 引述《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 Hip,Bust and Hip,Bust and Hip。」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.91.4
※ 編輯: mifan 來自: 140.112.91.4 (10/16 10:52)
推
10/16 12:09, , 1F
10/16 12:09, 1F
討論串 (同標題文章)