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

C++ getline() 完整指南:讀取整行字元的藝術與陷阱

     編輯:C++ 基礎

語法與參數

cin.getline(char* buffer, int n, char delim = '\n');
  • buffer:目標字元陣列
  • n:最多讀取 n-1 字元(留 1 位給 '\0')
  • delim:結束字元(預設換行符),不存入陣列,但會從流中消耗掉

關鍵行為差異:getline vs get vs >>

操作遇空白遇分隔符指標移動適用型別
cin >> str停止停止停留在分隔符前所有標準型別
cin.get(buf, n, delim)包含停止停留在分隔符上僅字元陣列
cin.getline(buf, n, delim)包含停止移至分隔符後僅字元陣列

實戰演示:多段分隔解析

// 輸入: I like C++./I study C++./I am happy.
char ch[20];
cin >> ch;                  // 只讀 "I" (遇空格停)
cin.getline(ch, 20, '/');   // 讀 " like C++." (含前導空格)
cin.getline(ch, 20);        // 讀 "I study C++./I am h" (19 字元含 '/')
// 若第二次也用 '/': 讀 "I study C++."

常見陷阱與對策

  1. 混用 >> 後接 getline:>> 留下換行符,導致 getline 讀到空行。
    解法:中間加 cin.ignore() 跳過換行符。
  2. 緩衝區太小:超長行會被截斷,餘下字元殘留流中污染下次讀取。
    解法:給足夠大陣列,或改用 std::string + std::getline (C++ 標準庫版本)。
  3. 分隔符殘留:get 留下分隔符,getline 消耗分隔符。混用時需 ignore() 協調。

現代 C++ 最佳實踐

#include 
std::string line;
while (std::getline(cin, line)) { // 自動動態擴充,無長度限制
    // 處理 line
}

標準庫 std::getline 回傳流物件,直接可用於迴圈條件,更安全、更簡潔。

總結

getline 是「讀整行、含空白」的利器,核心在於消耗分隔符、移動指標至後方。理解三種讀取函式的指標行為差異,配合 ignore() 協調混用場景,或直接升級 std::string 版本,能徹底解決輸入解析痛點。

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