Re: [問題] 有關Linker List練習問題

看板C_and_CPP作者 (喲)時間13年前 (2011/06/03 00:39), 編輯推噓4(4011)
留言15則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/03 08:50, , 1F
06/03 08:50, 1F

06/03 09:13, , 2F
06/03 09:13, 2F

06/03 11:12, , 3F
謝謝 !!!!!
06/03 11:12, 3F

06/04 20:27, , 4F
我記得scanf必須讀到前面所指定的"格式"才會將該數值讀入,
06/04 20:27, 4F

06/04 20:28, , 5F
所以用%d並不會使x讀到'\n'。scanf遇到\n會直接將他跳過,
06/04 20:28, 5F

06/04 20:29, , 6F
直到數值是指定的格式,才會將其讀入。若格式為%d,則只會
06/04 20:29, 6F

06/04 20:30, , 7F
入單純的數字。 ex.input:asdfa356!@#$ output:356
06/04 20:30, 7F

06/04 20:31, , 8F
但是那些不符合格式的字元,依然會存在輸入,他們只是被跳
06/04 20:31, 8F

06/04 20:31, , 9F
過而已,並沒有被刪除
06/04 20:31, 9F

06/04 20:36, , 10F
@@ 你自己測就知道了 scanf可沒那麼聰明
06/04 20:36, 10F

06/04 20:38, , 11F
當他讀到錯誤的格式時 輸入流的指標可沒往前喔
06/04 20:38, 11F

06/04 20:43, , 12F
阿..我記錯了..我忘了我前面會先用getchar來判斷了= =..
06/04 20:43, 12F

06/04 20:43, , 13F
上了一課了 感謝
06/04 20:43, 13F

06/04 20:44, , 14F
他只會略過space和\n而已
06/04 20:44, 14F

06/04 20:46, , 15F
當初在寫是用scanf的回傳值判斷讀入的數是否正確..才繼續做
06/04 20:46, 15F
文章代碼(AID): #1DvxpI0a (C_and_CPP)
文章代碼(AID): #1DvxpI0a (C_and_CPP)