看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
x000032001: 加std::在前面就好 因為你沒using到 04/18 17:51
name2name2: 原來如此謝謝Orz已解決 04/18 18:26
※ 編輯: name2name2 (218.164.135.97), 04/18/2015 18:28:23 ※ 編輯: name2name2 (218.164.135.97), 04/18/2015 18:30:27
name2name2: 再翻了下其他文章發現好像用using namespace std; 04/18 18:45
name2name2: 不過書上好像沒有寫到這個,只有教std下面成員的宣告 04/18 18:46
name2name2: 第三章沒有寫到std本身的宣告,應是因此所以沒用到.. 04/18 18:47
name2name2: 這個問題解決之後剛剛跑了一下發現另一個問題,就是 04/18 19:03
name2name2: 我剛輸入1結果好像開始跑無窮迴圈不知道為什麼... 04/18 19:03
name2name2: http://i.imgur.com/ZBYeOHL.png 04/18 19:03
name2name2: 再次抱歉是自己程式碼沒打好,已經沒有問題,謝謝! 04/18 19:09
name2name2: 恩..又發現雖然輸入1沒問題,但是輸入a就會跑無窮 04/18 19:14
name2name2: http://i.imgur.com/NBwC87q.png 04/18 19:15
RealJack: 建議看第5版,第5版改了很多東西 04/18 20:48
name2name2: 一個月前網路查一下查到4e就買了QQ 04/18 21:04
name2name2: 感謝回覆,不過我剛試了下如果是用continue,就算加上 04/18 21:05
name2name2: ^ cin.rdstate() 好像還是無窮,改成break不管有沒有 04/18 21:06
name2name2: ^ cin.rdstate()好像看不出差別,不過用break就沒有 04/18 21:07
name2name2: 輸入錯誤循環讀取的效果,再次感謝回覆! 04/18 21:08
RealJack: 沒實際跑sorry...記得在cin.clear();後加上cin.ignore() 04/18 21:19
RealJack: 清除緩衝區,否則用break跳出還是不能輸入 04/18 21:20
name2name2: 感謝已成功,我是將cin.clear(istream::failbit); 04/18 21:34
name2name2: 改成cin.clear(); cin.ignore; continue;就正常運作了 04/18 21:35
name2name2: 現在讀到第17章命名空間補充一下, 06/05 15:56
name2name2: 這裡有提到using namespace,不過他後來結論為了避免 06/05 15:56
name2name2: 不同namespace混用或後來加入有影響很麻煩 06/05 15:57
name2name2: 所以是建議細部都用using std::XXX這樣子 06/05 15:57
name2name2: 不過一開始學的確直接先宣告namespace std在上方確實 06/05 15:58
name2name2: 可以省掉很多不必要的麻煩啊!! 06/05 15:58