看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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