getline 的使用詳解

2021-08-29 05:00:35 字數 1699 閱讀 4495

一、getline( ) 

int main()

{string line:

while(getline(cin,line))

cout標頭檔案:#include

istream& getline ( istream &is , string &str , char delim );

其中,istream &is 表示乙個輸入流,譬如cin;

string&str表示把從輸入流讀入的字串存放在這個字串中(可以自己隨便命名,str什麼的都可以);

char delim表示遇到這個字元停止讀入,在不設定的情況下系統預設該字元為'\n',也就是回車換行符(遇到回車停止讀入)。

string line;

cout<<"please cin a line:";

getline(cin,line,'#');

cout<<"the line you give is:"《那麼當我輸入"you are the #best!" 的時候,輸入流實際上唯讀入了"you are the ",#後面的並沒有存放到line中(應該是在緩衝區裡吧)。然後程式執行結果應該是這樣的:

please cin a line:you are the #best!

the line you give is:you are the 

while(getline(cin,line))語句

注意這裡預設回車符停止讀入,按ctrl+z或鍵入eof回車即可退出迴圈。

在這個語句中,首先getline從標準輸入裝置上讀入字元,然後返回給輸入流cin,注意了,是cin,所以while判斷語句的真實判斷物件是cin,也就是判斷當前是否存在有效的輸入流。在這種情況下,我想只要你的電腦不中毒不發神經你的輸入流怎麼會沒有效?所以這種情況下不管你怎麼輸入都跳不出迴圈,因為你的輸入流有效,跳不出迴圈。

然而有些同學誤以為while判斷語句的判斷物件是line(也就是line是否為空),然後想通過直接回車(即輸入乙個空的line)跳出迴圈,卻發現怎麼也跳不出迴圈。這是因為你的回車只會終止getline()函式的讀入操作。getline()函式終止後又進行while()判斷(即判斷輸入流是否有效,你的輸入流當然有效,滿足條件),所以又執行getline()函式。

所以,以下的寫法根本不可能讓你推出while()迴圈的:

while(getline(cin,line))

cout《二、cin.getline()

此函式會一次讀取多個字元(包括空白字元)。它以指定的位址為存放第乙個讀取的字元的位置,依次向後存放讀取的字元,直到讀滿n-1個,或者遇到指定的結束符為止。若不指定結束符,則預設結束符為'\n'。其語法為:

cin.getline(字元指標(char*),字元個數n(int),結束符(char));

#include "stdafx.h"

#include

#include

#include

using namespace std;

int main()

{char a[30];

cout << "請輸入乙個字串:" << endl;

cin.getline(a, 10);//第10位存放字串結束符'\0'

for (int i = 0; i<10; i++)

cout << "第"《輸入:1234567890123

輸出:1 2 3 4 5 6 7 8 9 _ (第10位存放字串結束符'\0')

getline 函式詳解

學習c 的同學可能都會遇到乙個getline 函式,譬如在c premer中,標準string型別第二小節就是 用getline讀取整行文字 書上給的程式如下 int main 大家會發現執行時怎麼也跳不出迴圈,甚至會發生各種莫名其妙的錯誤。這是為什麼呢?在這裡我給大家做乙個詳細的講解。istrea...

getline 函式詳解

學習c 的同學可能都會遇到乙個getline 函式,譬如在c premer中,標準string型別第二小節就是 用getline讀取整行文字 書上給的程式如下 int main string line cout please cin a line getline cin,line,cout the ...

getline 函式詳解

學習c 的同學可能都會遇到乙個getline 函式,譬如在c premer中,標準string型別第二小節就是 用getline讀取整行文字 書上給的程式如下 int main 大家會發現執行時怎麼也跳不出迴圈,甚至會發生各種莫名其妙的錯誤。這是為什麼呢?在這裡我給大家做乙個詳細的講解。istrea...