C 讀入一行字串

2021-10-04 02:02:47 字數 1450 閱讀 8934

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 方...