[問題] scanf的奇妙bug?

作者: d630200x (DOGE)   2019-02-26 15:37:12
用的編譯器是gcc
平台是linux
剛剛寫一個無窮迴圈
char word;
while(1)
{
printf("something\n");
scanf("%c", &word);
}
用%c的話,something一定會重複印兩行才會給我輸入word
但改成%s的話就又沒這個bug了
請問這是甚麼問題?
作者: nh60211as   2019-02-26 16:08:00
你有把word印出來看是什麼嗎
作者: samuelcdf (溫泉龜)   2019-02-26 16:14:00
&word如果是%s的話, 你對應的word應該會宣告陣列吧. 直接寫陣列名結果跟 &陣列名[0] 一樣
作者: d630200x (DOGE)   2019-02-26 16:19:00
有加上&word,剛剛沒打到主要是我另一支程式有用自字元做判斷,且判斷式使用都ok,但就是會莫名印兩行,後來另外這樣寫做測試也是一樣情況
作者: samuelcdf (溫泉龜)   2019-02-26 16:26:00
\n還在buffer裡面, 所以迴圈多跑一次
作者: d630200x (DOGE)   2019-02-26 16:31:00
為什麼\n會還在buffer裡?為什麼迴圈會重跑?
作者: samuelcdf (溫泉龜)   2019-02-26 16:33:00
每次你輸入一個字元之後, 接著會按enter. 那個enter也被當成另外一個輸入的字元了
作者: nthank (不謝)   2019-02-26 17:38:00
輸入的enter也算是一個字元
作者: MOONRAKER (㊣牛鶴鰻毛人)   2019-02-26 18:12:00
到底寫了多少程式才發現這個大家都知道的偉大bug
作者: dces4212 (flawless)   2019-02-26 19:01:00
stdin buffer裡面還有enter字元
作者: stupid0319 (徵女友)   2019-02-26 19:03:00
月經文
作者: chchwy (mat)   2019-02-26 19:53:00
1. 換行符號 2. 這不是bug
作者: tomsawyer (安安)   2019-02-26 21:02:00
cin也會啊lul
作者: Bencrie   2019-02-27 01:28:00
好險你沒有真的去 bugzilla 報 bug XD
作者: IhateOGC (我討厭)   2019-02-27 09:45:00
台灣之光!! 快點去報Bug,這很明顯是Bug我資料表單就常常遇到這鳥問題
作者: OhYiDay (小白Z)   2019-02-27 10:57:00
XD
作者: TitanEric (泰坦)   2019-02-27 11:37:00
抱歉我笑了
作者: wei115 (ㄎㄎ)   2019-02-27 13:53:00
緩衝區日常,特別是格式化和非格式化特別容易遇到
作者: x246libra (楓)   2019-02-27 14:11:00
原來有這種問題,之前沒特別注意,謝謝發文者
作者: hunandy14 (Charlott.HonG)   2019-02-27 17:18:00
記得是要把sancf 還什麼放到 while 內就好了阿想起來了 好像是 file 才是XDD
作者: koka813 (shift)   2019-03-01 15:49:00
真的是笑了
作者: HanaYukii (ShioRin)   2019-03-07 01:41:00
cin不會
作者: a0928855286 (Alan君)   2019-03-12 01:14:00
那要怎麼解決啊?
作者: jxzhe   2019-03-16 17:49:00

Links booklink

Contact Us: admin [ a t ] ucptt.com