Re: 關於gets(const char *)的用法?

看板Programming作者 (ssagit)時間18年前 (2006/09/10 11:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
※ 引述《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
文章代碼(AID): #150uPNf3 (Programming)
文章代碼(AID): #150uPNf3 (Programming)