作者yauhh (喲)
看板C_and_CPP
標題Re: [問題] 有關Linker List練習問題
時間Fri Jun 3 00:39:41 2011
※ 引述《img6859 (草莓ㄦ)》之銘言:
: 問題(Question):
: 沒辦法出現我想要的結果
: 餵入的資料(Input):
: i3
: i4
: d3
: i51
: i18
: d18
: e
: 預期的正確結果(Expected Output):
: 4 51
: 錯誤結果(Wrong Output):
: 3 3 3 3 4 4 18 18 18 18 51 51
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://pastie.org/pastes/2003668
看了前一段 main 程式就知道問題大概是出現在哪.
將輸入部份抽出來檢查,因為你 scanf("%d", &x) 只讀一個字元,
但是你忘了 '\n' 也是一個字元,所以實際操作跟你預想的不同.
從輸入序列中讀不到下一個指令,並且前一個數字仍存在變數中.
並且 if(t = 'i') 也製造了另外一個意外情況,使 if 部份一直執行,
而 else 部份一直跳過.
於是,改寫成:
http://pastie.org/2009354
就可以檢查自己做得對不對. 使用 scanf 函數記得要善用格式文字
把不想要輸入的字碼消化掉.
如果主程式輸入部份改對了,但仍有問題,才開始檢查 insert 與 ddelete 函數.
寫程式要學的是先把每一小段程式都檢查過,確認各種情況正確,
才合併在一起檢查整個有沒有問題.
: 補充說明(Supplement):
: 最近在學Linker List 想要練習看看
: 用的書是 Fundamentals Of Data Structures In C
: 看書改了些程式碼 不過還是失敗
: 請各位大大幫我找為什麼 T^T
這是一本很好很好的書,慢慢享受吧.
--
/yau
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.66.160
推 angleevil:推 06/03 08:50
推 xatier:推 06/03 09:13
→ img6859:謝謝 !!!!! 06/03 11:12
推 gacktz:我記得scanf必須讀到前面所指定的"格式"才會將該數值讀入, 06/04 20:27
→ gacktz:所以用%d並不會使x讀到'\n'。scanf遇到\n會直接將他跳過, 06/04 20:28
→ gacktz:直到數值是指定的格式,才會將其讀入。若格式為%d,則只會 06/04 20:29
→ gacktz:入單純的數字。 ex.input:asdfa356!@#$ output:356 06/04 20:30
→ gacktz:但是那些不符合格式的字元,依然會存在輸入,他們只是被跳 06/04 20:31
→ gacktz:過而已,並沒有被刪除 06/04 20:31
→ firejox:@@ 你自己測就知道了 scanf可沒那麼聰明 06/04 20:36
→ firejox:當他讀到錯誤的格式時 輸入流的指標可沒往前喔 06/04 20:38
推 gacktz:阿..我記錯了..我忘了我前面會先用getchar來判斷了= =.. 06/04 20:43
→ gacktz:上了一課了 感謝 06/04 20:43
→ gacktz:他只會略過space和\n而已 06/04 20:44
→ gacktz:當初在寫是用scanf的回傳值判斷讀入的數是否正確..才繼續做 06/04 20:46