[問題] scanf及fflush的問題?

作者: sr29 (owo)   2015-06-19 18:21:18
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GNU GCC using Code::Blocks
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
none
問題(Question):
在迴圈中的scanf標準化輸入中如果是scanf("%lf,%lf",&num1,&num2)
則會正常讀入
若是改成scanf("(%lf,%lf)",&num1,&num2)
則會出現錯誤(只能讀入第一次的內容)
若是加入fflush(stdin)就會需要多輸入一個空白
迴圈外有一個printf、一個scanf、再一個printf
完整的程式碼在這邊 http://paste.plurk.com/show/2189312/
餵入的資料(Input):
3 (1,2) (3,4) (5,6)
預期的正確結果(Expected Output):
1 2
3 4
5 6
錯誤結果(Wrong Output):
1 2
1 2
1 2
程式碼(Code):(請善用置底文網頁, 記得排版)
http://paste.plurk.com/show/2189312/
補充說明(Supplement):
很少用到標準化輸入 不知道為什麼會出這種問題
用了fflush以後會變成scanf無法用空白來決定輸入是否停止
所以如果我把(1,2) (3,4)中間用空白來打
就沒辦法讀了
如有不清 我會再補充 感謝大家m(_ _)m
作者: bibo9901 (function(){})()   2015-06-19 18:29:00
改成 scanf("%d ") 和 scanf("(%lf,%lf) ")然後 flush(stdin) 是 undefined behavior我意思是scanf 第一個參數,結尾加一個空白 @@
作者: sr29 (owo)   2015-06-19 21:43:00
恩 我有加過了 第二個scanf也是一樣 結果還是無法orz
作者: easyget (easyget)   2015-06-19 23:10:00
http://pastie.org/10248921從 16 行開始,有變更 如果大大有什麼問題,再發信問我
作者: johnhmj (耗呆肥羊)   2015-06-20 00:50:00
作者: yvb   2015-06-20 16:27:00
改成空白放前面, 也就是 scanf(" (%lf,%lf)",... 這樣呢?
作者: LPH66 (-6.2598534e+18f)   2015-06-20 17:14:00
問題在於大部份的 %xx 會先吃掉空白再讀, 但非 % 字元不會所以 ( 就真的只吃 ( 不吃空白, 於是輸入之間的空白就卡住而在格式字串裡放空白則是一個空白吃全部連續的空白這樣就把輸入之間的空白給吃掉了另外要注意的是 %xx 會停在它看不懂的第一個字而且**不會先幫你吃掉空白**, 這對後讀的讀取會造成影響(以上我推文中的「空白」皆指 whitespace, 廣義的空白字元)
作者: sr29 (owo)   2015-06-20 17:47:00
了解了 感謝!
作者: firejox (Tangent)   2015-06-22 20:13:00
scanf("%*1[(]%lf%*1[,]%lf%*1[)]",..) ?
作者: sr29 (owo)   2015-06-24 11:54:00
有試過了 樓上那個好像也可以!

Links booklink

Contact Us: admin [ a t ] ucptt.com