Re: 關於gets(const char *)的用法?
※ 引述《jtmh (Believing is seeing! ^^)》之銘言:
: ※ 引述《ssagit (ssagit)》之銘言:
: : 也不是不行, Try:
: : char s[100];
: : scanf("%[^\n]", s);
: 這個的確可以讀取一整行,
: 不過還是會有前述 keyboard buffer 中殘留字元的問題要解決。
: : printf("%s\n", s);
我只能說, scanf 的問題可能比 gets 還要多,
scanf("%s", s); 這樣的語法, 它一樣不會檢查是不是超過 s 的長度,
和 gets 一樣會有 buffer overflow 的問題....
而上面的程式如果要連續讀兩行,
可以寫成:
scanf("%[^\n]\n", s);
scanf("%[^\n]", t);
但是這樣讀完還是會剩一個 \n 沒讀進來,
而如果改成下面的寫法,
scanf("%[^\n]\n", s);
scanf("%[^\n]\n", t);
也就是第二行也加上 \n, 則你第三行也要輸入點東西,
否則它不會跳出來.... (我使用 Dev-C++)
而上面第一個的例子, 如果一開始就直接按 Enter,
s 會根本沒讀到東西而變成亂碼,
還有原本要用 %d 讀資料時, 使用者輸入了非數字的字串,
也會造成之後程式讀到的都不對,
綜合來說, 遇到不照規距輸入的時候,
scanf 會遇到更多問題,
所以我以前寫 DOS 程式的時候,
我寧可用 getc 一個字一個字讀進來再做處理,
或是用 gets、fgets 一次讀一行,
讀進來再用 sscanf 或 atoi 之類的函數再處理.....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.191.133
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章