面向行的輸入 getline()和get()

2021-08-10 10:11:18 字數 1521 閱讀 8418

getline():

getline()函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。呼叫方法為cin.getline()。該函式有兩個引數。第乙個引數是陣列名,第二個引數是要讀取的字元數。例如第二個引數為n,則函式最多讀取n-1個字元,因為至少要保留乙個空間存空字元,即'\0'。getline()成員函式在讀取指定數目的字元或遇到換行符時停止讀取。當遇到換行符時,它也會從輸入流中讀取該換行符,但在儲存字串時,用空字元代替換行符來儲存在字串中。

get():

該函式有幾種變體,其中一種變體的工作方式與getline()類似,接受的引數的意義與解釋都相同,並且都是讀取到行尾。但是當遇到換行符時,get()方法並不讀取換行符,而是將其留在輸入流中。例如當執行以下語句時:

cin.get(a,100);

cin.get(b,100);

由於在輸入b的時候,輸入流中第乙個字元是在輸入a時留下來的換行符,因此實際上輸入給b的字元是乙個換行符。為了避免這個問題,可以在其中新增一條一句,即:

cin.get(a,100);

cin.get();

cin.get(b,100);

cin.get()會「吸收掉」輸入流中留下來的換行符。也可以這麼簡寫:

cin.get(a,100).get();

cin.get(b,100);

之所以可以這麼做,是因為cin.get(a,100)返回的是乙個cin物件,該物件隨後將被用來呼叫get()方法。同樣道理,下列語句也是允許的。

cin.getline(a,100).getline(b,100);

關於string使用getline()

c++新增了string類擴充套件了c++庫。因此可以用string型別的變數而不是字元陣列來儲存字串。要使用string類,必須包含標頭檔案string。

一般字元陣列和string變數使用getline()方法是不同的。

char a[100];

string str;

cin.getline(a,100);

getline(cin,str);

cin.getline()這種是句點表示法,函式getline()是istream類的乙個類方法。getline(cin,str)沒有用到句點表示法,這表明這個getline()不是類方法。它將cin作為引數,指出到**去查詢輸入。另外,也沒有指出字串的長度,因為string物件會根據輸入的串的大小自動調整自身的大小。

為什麼第二個getline()不是istream的類方法呢。在引入string類之前很久,c++就有了istream類。因此istream的設計考慮到了諸如double和int等基本c++資料型別,但沒有考慮到string型別,所以string類中,有處理double,int和其他基本型別的類方法,但沒有處理string物件的類方法。

但cin方法也適用與string類物件,這涉及到友元函式,這裡先不闡述。

C 行輸入getline 和get

c語言在讀取字串時可使用scanf 函式,但是scanf 只能讀入乙個單詞,如果要讀取一行文字可使用gets 和其它函式,詳細可戳此鏈結檢視。同樣,在c 中也提供了面向行輸入的函式getline 和get getline 函式讀取整行,通過回車換行符確定輸入結尾,隨後丟棄換行符。要呼叫這種方法,使用...

getline輸入n行遇到的問題記錄

問題描述 輸入n代表接下來輸入n行字串,例如下面所示 5 05 00 a.m.server is started 05 00 a.m.rescan initialized 01 13 p.m.request processed 01 10 p.m.request processed 11 40 p....

getline 輸入無效的原因

實際上你在每次輸入資料的時候會輸入乙個回車 n cin在讀入整數時候會忽略空白碰到非數字 n 時停止 cin在getline時會把 n 及之前的內容讀回來,哪怕是空行也會讀入 cin在讀入字元時會把緩衝區內當前字元讀入 不會忽略空白 cin.ignore 1000,n 的含義是把緩衝區內從當前字元開...