Re: [問題] 老梗的猜數字 (C++)

看板Programming作者 (殺人電風扇)時間16年前 (2008/04/20 22:46), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《revivalworld (指考加油Q_Q)》之銘言: : ※ 引述《eric8347 (殺人電風扇)》之銘言: : : 雖然這是一個快被討論到爛掉的題目 : : 不過我還是要來問一下XD : : 主程式部分都已經OK : : 但是老師和我說要是輸入英文的話 : : 程式就會錯誤 : : 要我回去修改 : : 在參考了精華區裡面的猜數字&cin的特殊用法 : : 修改程式碼後 : : 變成現在可以正確判定是不是正確輸入數字 : : 或者輸入的是英文or英文混雜數字 : : 但是問題來了 : : 確定是數字後 : : 有些數字會無法繼續進行下面的程式碼 : : 讓我非常苦惱 : : 附上cpp檔 : : http://eric8347.googlepages.com/guess.cpp : : 請求各位大大了... : if( !cin.good() ) { : // 清除 cin 的所有 flag, 設立 good bit : // 記得這個動作要先做,不然只要 cin 處在錯誤狀態,任何操作都是無效的 : cin.clear(); : // 吃掉 input buffer 裡面的所有字元 : cin.ignore( numeric_limits<streamsize>::max(), '\n' ); : } 先說聲 謝謝 感激願意替我看程式碼的大大 我剛剛又重新看了一下原本的程式碼 發現原本的問題應該是 確定是數字後(或者判斷輸入中有出現英文的話) 再輸入一組數字 就可以判定 ex: 1234 1234 ==>1A 1B or 12a4 1234 ==>1A 1B 這樣子 還有阿 我發現程式一執行如果就輸入英文 他就會出錯 但要是先輸入數字 就沒問題... 天阿到底是怎麼一回事阿... 我把部分的程式碼貼上來好了 其中while(cin >> strtmp)這一段 因為是參考精華區的 看不太懂 我在想會不會是這一段裡面有出錯 cout << "請輸入 4 位數字(0123~9876):"<<endl; cin >> ans; while(cin >> strtmp) { check = true; for(int c=0;c < strtmp.size();c++) { if(!isdigit(strtmp[c])) { check = false; break; } } if(check) { istringstream istr(strtmp); istr >> ans; break; } else cout << "你輸入的不是數字喔!" <<endl; } if (ans<0123 || ans>9876) cout << "不合理的範圍。"<<endl; else break; } 問題真的很多 非常不好意思 請見諒... -- http://eric8347.blogspot.com -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.22.7

04/20 23:09, , 1F
不太懂你的第二個問題(原文裡的)
04/20 23:09, 1F

04/20 23:09, , 2F
原文第一個問題我已經告訴你解法了
04/20 23:09, 2F

04/20 23:33, , 3F
如果第一次輸入正確數字 沒反應 接下來
04/20 23:33, 3F

04/20 23:34, , 4F
cin >> ans; 那行是多餘的
04/20 23:34, 4F

04/20 23:33, , 5F
第二次輸入正確的數字就可以正確執行
04/20 23:33, 5F

04/20 23:35, , 6F
天阿 原來是那行忘記去掉...太感謝了!!
04/20 23:35, 6F

04/20 23:36, , 7F
再一次感謝願意幫我解決問題的各位大大!
04/20 23:36, 7F
文章代碼(AID): #182rTK_S (Programming)
文章代碼(AID): #182rTK_S (Programming)