[問題] C++ 程式碼問題

看板C_and_CPP (C/C++)作者 (yanghi)時間11年前 (2015/04/18 17:47), 11年前編輯推噓2(2026)
留言28則, 3人參與, 最新討論串1/1
開發平台(Platform): VC++ 問題(Question): 最近在看C++ primer 4e 自行摸索, 書上有些程式碼如下面這段打到電腦上時會出現錯誤, 自己看不出問題在哪裡,想要請教一下謝謝... 這是書上p289的程式碼(第八章形勢狀態) 程式碼(Code):(請善用置底文網頁, 記得排版) //因為我是累積練習的所以include很多東西請見諒... #include <iostream> #include <string> #include <vector> #include <cctype> #include <bitset> #include <cstring> #include <stdexcept> #include <cstddef> #include <cassert> #include <cstdlib> using std::cin; using std::cout; using std::string; using std::endl; using std::vector; using std::toupper; using std::bitset; int main() { int i; while (cin >> i, !cin.eof()) { if (cin.bad()) throw runtime_error(" IO stream corrupted"); if (cin.fail()){ cerr << "bad data, try again"; cin.clear(istream::failbit); continue; } } system("pause"); return 0; } 補充說明(Supplement): 附圖,主要是紅線的部分好像都undeclared或not found,我在想是不是我少include什麼,不過書上找了找好像沒找到線索.. http://i.imgur.com/HbEP9s3.png
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.135.97 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429350451.A.FEB.html ※ 編輯: name2name2 (218.164.135.97), 04/18/2015 17:48:55

04/18 17:51, , 1F
加std::在前面就好 因為你沒using到
04/18 17:51, 1F

04/18 18:26, , 2F
原來如此謝謝Orz已解決
04/18 18:26, 2F
※ 編輯: name2name2 (218.164.135.97), 04/18/2015 18:28:23 ※ 編輯: name2name2 (218.164.135.97), 04/18/2015 18:30:27

04/18 18:45, , 3F
再翻了下其他文章發現好像用using namespace std;
04/18 18:45, 3F

04/18 18:46, , 4F
不過書上好像沒有寫到這個,只有教std下面成員的宣告
04/18 18:46, 4F

04/18 18:47, , 5F
第三章沒有寫到std本身的宣告,應是因此所以沒用到..
04/18 18:47, 5F

04/18 19:03, , 6F
這個問題解決之後剛剛跑了一下發現另一個問題,就是
04/18 19:03, 6F

04/18 19:03, , 7F
我剛輸入1結果好像開始跑無窮迴圈不知道為什麼...
04/18 19:03, 7F

04/18 19:03, , 8F

04/18 19:09, , 9F
再次抱歉是自己程式碼沒打好,已經沒有問題,謝謝!
04/18 19:09, 9F

04/18 19:14, , 10F
恩..又發現雖然輸入1沒問題,但是輸入a就會跑無窮
04/18 19:14, 10F

04/18 19:15, , 11F

04/18 20:48, , 13F
建議看第5版,第5版改了很多東西
04/18 20:48, 13F

04/18 21:04, , 14F
一個月前網路查一下查到4e就買了QQ
04/18 21:04, 14F

04/18 21:05, , 15F
感謝回覆,不過我剛試了下如果是用continue,就算加上
04/18 21:05, 15F

04/18 21:06, , 16F
^ cin.rdstate() 好像還是無窮,改成break不管有沒有
04/18 21:06, 16F

04/18 21:07, , 17F
^ cin.rdstate()好像看不出差別,不過用break就沒有
04/18 21:07, 17F

04/18 21:08, , 18F
輸入錯誤循環讀取的效果,再次感謝回覆!
04/18 21:08, 18F

04/18 21:19, , 19F
沒實際跑sorry...記得在cin.clear();後加上cin.ignore()
04/18 21:19, 19F

04/18 21:20, , 20F
清除緩衝區,否則用break跳出還是不能輸入
04/18 21:20, 20F

04/18 21:34, , 21F
感謝已成功,我是將cin.clear(istream::failbit);
04/18 21:34, 21F

04/18 21:35, , 22F
改成cin.clear(); cin.ignore; continue;就正常運作了
04/18 21:35, 22F

06/05 15:56, , 23F
現在讀到第17章命名空間補充一下,
06/05 15:56, 23F

06/05 15:56, , 24F
這裡有提到using namespace,不過他後來結論為了避免
06/05 15:56, 24F

06/05 15:57, , 25F
不同namespace混用或後來加入有影響很麻煩
06/05 15:57, 25F

06/05 15:57, , 26F
所以是建議細部都用using std::XXX這樣子
06/05 15:57, 26F

06/05 15:58, , 27F
不過一開始學的確直接先宣告namespace std在上方確實
06/05 15:58, 27F

06/05 15:58, , 28F
可以省掉很多不必要的麻煩啊!!
06/05 15:58, 28F
文章代碼(AID): #1LCYWp_h (C_and_CPP)
文章代碼(AID): #1LCYWp_h (C_and_CPP)