需連續讀取兩組整數序列分別存入 vector<int> ivec1、ivec2,以 EOF(Ctrl+Z/Ctrl+D)結束每組輸入。直接連續 while(cin>>n) 會導致第二組無法讀取任何數據。
第一組讀取遇到 EOF 後,cin 進入失效狀態(eofbit 置位),後續提取操作直接失敗,不再從緩衝區讀取。
cin.clear()#include <iostream> #include <vector> using namespace std; int main() { vector<int> ivec1, ivec2; int n; while (cin >> n) ivec1.push_back(n); cin.clear(); // 關鍵:重置流狀態標志(eofbit/failbit/badbit) int m; while (cin >> m) ivec2.push_back(m); // 比較兩 vector 內容 bool flag = false; for (auto iter1 = ivec1.begin(), iter2 = ivec2.begin(); iter1 != ivec1.end() && iter2 != ivec2.end(); ++iter1, ++iter2) { if (*iter1 != *iter2) { flag = true; break; } } cout << (flag ? "no" : "yes") << endl; return 0; }
cin.clear() 僅重置錯誤標志,**不清空緩衝區內容**。若首次輸入留有未讀字符(如換行符),第二次讀取會先消費它們。通常配合 cin.ignore(numeric_limits<streamsize>::max(), '\n') 清空當前行殘留。istream_iterator 簡化:vector<int> v(istream_iterator<int>(cin), {}); 但同樣需 cin.clear() 才能再次讀取。cin.clear()。cin.ignore() 清空行尾。cin.fail() 區分格式錯誤與 EOF。