getline() 是 istream 類的成員函式,它有如下兩個過載版本:
istream &
getline
(char
* buf,
int bufsize)
;istream &
getline
(char
* buf,
int bufsize,
char delim)
;
第乙個版本從輸入流中讀取 bufsize-1 個字元到緩衝區 buf,或遇到\n為止(哪個條件先滿足就按哪個執行)。函式會自動在 buf 中讀入資料的結尾新增\0。
第二個版本和第乙個版本的區別在於,第乙個版本是讀到\n為止,第二個版本是讀到 delim 字元為止。\n或 delim 都不會被讀入 buf,但會被從輸入流中取走。
這兩個函式的返回值就是函式所作用的物件的引用。如果輸入流中\n或 delim 之前的字元個數達到或超過 bufsize,就會導致讀入出錯,其結果是:雖然本次讀入已經完成,但是之後的讀入都會失敗。
從輸入流中讀入一行,可以用第乙個版本。用cin >> str這種寫法是不行的,因為此種讀法在碰到行中的空格或製表符時就會停止,因此就不能保證 str 中讀入的是整行。
第乙個版本的 getline 函式的用法示例如下:
#include
using
namespace std;
intmain()
程式的執行過程如下:
33
3344
44
在上面的輸入情況下,程式是正常的。程式執行過程中還可能出現如下情況:
ab cd123456k
error
ab cd
120123456
第 7 行,讀入時因字串超長導致出錯,於是第 11 行並沒有從輸入流讀入 n,n 維持了原來的值 120。
第 12 行,呼叫 istream 的成員函式 clear() 清除 cin 內部的錯誤標記,此後 cin 又能正常讀入了。因此,123456 在第 13 行被讀入 n。
可以用 getline() 函式的返回值(為 false 則輸入結束)來判斷輸入是否結束。例如,要將檔案 test.txt 中的全部內容(假設檔案中一行最長有 10 000個字元)原樣顯示,程式可以如下編寫:
#include
using
namespace std;
const
int max_line_len =
10000
;//假設檔案中一行最長 10000 個字元
intmain()
程式每次讀入檔案中的一行到 szbuf 並輸出。szbuf 中不會讀入回車符,因此輸出 szbuf 後要再輸出 endl 以換行。 C 讀入一行字串
在c 中,要讀取一行一共有三種方法 一.對於字元陣列 方法一 getline 讀入整行資料,它使用回車鍵輸入的換行符來確定輸入結尾。呼叫方法 cin.getline str,len 第乙個引數str是用來儲存輸入行的陣列名稱,第二個引數len是要讀取的字元數。1 include 2 using na...
5 C 讀入一行字串
cin.getline char str,int size t,char delim 標頭檔案 include 引數1 字元陣列 引數2 讀入字串長度 引數3 終止符 示例 char str 105 cin.getline str,100 istream getline istream is,str...
C 輸入一行字串
一.對於字元陣列 方法一 getline 讀入整行資料,它使用回車鍵輸入的換行符來確定輸入結尾。呼叫方法 cin.getline str,len 第乙個引數str是用來儲存輸入行的陣列名稱,第二個引數len是要讀取的字元數。include using namespace std int main 方...