作者laiDark (Laxrry)
看板C_and_CPP
標題[問題] 整列字串輸入與取得
時間Tue Oct 28 09:59:21 2014
開發平台 codeblock
使用 C 語言
http://ppt.cc/SpBT
由於此題ACM需要輸入整列字串
於是我使用gets()
http://codepad.org/EQduelG6
這個只是我想先測試輸入的狀況
但是當我輸入n的值的時候
他竟然直接給我空兩行!!!
(不好意思 這個部分沒辦法截到圖po上來)
我在想是不是因為printf有加\n的關係
沒有加的話 就不會發生這種問題
但是最後測試的輸出結果就是要換行....
scanf 雖然不會有這種問題
但是scanf遇到空白字元 不是會停止取字元嗎?
像這樣
http://ppt.cc/39Fm
printf 就沒辦法印出整列的@@
到底該怎麼辦呢?
然後就是不管是用scanf("%s")
還是用gets(字串名稱)
輸入字串後
比如str[6] 我輸入字串 north
是不是compiler 就會視為
str[0] -> n
str[1] -> o
str[2] -> r
str[3] -> t
str[4] -> h
str[5] -> \0
這樣是否理解是否正確?
還請各位前輩 幫忙解開小的疑惑 謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.240.79
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414461564.A.655.html
推 LPH66: scanf 後面跟的 gets 會先吃掉 scanf 沒吃掉的換行當做一次 10/28 11:55
→ LPH66: 輸入 (其結果是空字串), 再下一次才會正確讀到下一行 10/28 11:55
→ LPH66: 解法有二: 一是偷雞法, scanf 完先用一次 gets 把那個換行 10/28 11:56
→ LPH66: 吃掉, 第二次開始才正常處理; 二是連數字都用 gets 吃進來 10/28 11:56
→ LPH66: 再用 sscanf 或 atoi 轉數字處理 10/28 11:56
→ laiDark: 不好意思 樓上的L大 你說的解決方法 我有點不懂@@ 10/28 15:02
→ laiDark: 不太知道您說的 應該要改成甚麼才好? 我試過結果就當了.. 10/28 15:03
→ nakabin: L大的意思是法1.連做兩次gets 或使用法2.一開始不要用 10/28 16:18
→ nakabin: scanf而是也用gets再把char轉成int 10/28 16:19