char c;
while (!cin.eof()) { // 未遇 EOF 繼續
if ((c = cin.get()) != ' ')
cout.put(c); // 過濾空白字元
}
讀到 EOF 回傳非零值。適用檔案流與標準輸入(Ctrl+Z / Ctrl+D 觸發)。
int ch = cin.peek(); // 回傳下一字元 ASCII,指標不動 if (ch == '/') cin.get(); // 若是分隔符則消耗它
遇 EOF 回傳 EOF (-1)。常用於預判輸入格式(如區分數字開頭是整數還是浮點數)。
cin.get(ch); // 讀取一字元 if (ch != ' ') cin.putback(ch); // 非空白則退回,留給後續 >> 讀取
只能退回剛讀取的字元,且每次最多一個。配合 peek 可實現「看一眼、決定怎麼讀」的詞法分析邏輯。
cin.ignore(5, 'A'); // 跳過 5 字元或遇 'A' 停止 (含 'A') cin.ignore(); // 等價 ignore(1, EOF):跳過 1 字元
常用於跳過分隔符(如 getline 後殘留的換行符)或跳過固定寬度欄位。
// 輸入: I like C++./I study C++./I am happy. char part[20]; cin.get(part, 20, '/'); // 讀 "I like C++." cout << "第一段: " << part << endl; cin.ignore(); // 跳過 '/' cin.get(part, 20, '/'); // 讀 "I study C++." cout << "第二段: " << part << endl; cin.ignore(); cin.getline(part, 20); // 讀剩餘 "I am happy." cout << "第三段: " << part << endl;
所有 istream 衍生類物件通用:cin、ifstream、istrstream 等。
掌握 eof/peek/putback/ignore,能從「被動讀取」進化為「主動掌控輸入流」,精準處理複雜格式、錯誤恢復與詞法分析任務。