首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ istream 進階成員函式:eof、peek、putback、ignore 實戰

     編輯:C++ 基礎

eof():檢測檔案/流結尾

char c;
while (!cin.eof()) {        // 未遇 EOF 繼續
    if ((c = cin.get()) != ' ')
        cout.put(c);        // 過濾空白字元
}

讀到 EOF 回傳非零值。適用檔案流與標準輸入(Ctrl+Z / Ctrl+D 觸發)。

peek():偷看下一字元不取走

int ch = cin.peek();        // 回傳下一字元 ASCII,指標不動
if (ch == '/') cin.get();   // 若是分隔符則消耗它

遇 EOF 回傳 EOF (-1)。常用於預判輸入格式(如區分數字開頭是整數還是浮點數)。

putback():將讀取字元退回流中

cin.get(ch);                // 讀取一字元
if (ch != ' ') cin.putback(ch); // 非空白則退回,留給後續 >> 讀取

只能退回剛讀取的字元,且每次最多一個。配合 peek 可實現「看一眼、決定怎麼讀」的詞法分析邏輯。

ignore(n, delim):跳過指定字元

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,能從「被動讀取」進化為「主動掌控輸入流」,精準處理複雜格式、錯誤恢復與詞法分析任務。

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved