[問題] 整列字串輸入與取得

作者: laiDark (煎餃加賴)   2014-10-28 09:59:21
開發平台 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
這樣是否理解是否正確?
還請各位前輩 幫忙解開小的疑惑 謝謝!!
作者: LPH66 (-6.2598534e+18f)   2014-10-28 11:55:00
scanf 後面跟的 gets 會先吃掉 scanf 沒吃掉的換行當做一次輸入 (其結果是空字串), 再下一次才會正確讀到下一行解法有二: 一是偷雞法, scanf 完先用一次 gets 把那個換行吃掉, 第二次開始才正常處理; 二是連數字都用 gets 吃進來再用 sscanf 或 atoi 轉數字處理
作者: laiDark (煎餃加賴)   2014-10-28 15:02:00
不好意思 樓上的L大 你說的解決方法 我有點不懂@@不太知道您說的 應該要改成甚麼才好? 我試過結果就當了..
作者: nakabin (日落)   2014-10-28 16:18:00
L大的意思是法1.連做兩次gets 或使用法2.一開始不要用scanf而是也用gets再把char轉成int

Links booklink

Contact Us: admin [ a t ] ucptt.com