getline函式的一些問題

2021-08-10 04:37:16 字數 2181 閱讀 2816

getline()的原型是

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 << endl << "the line you give is:"line;

1.那麼當輸入"you are the #best!" 的時候,輸入流實際上唯讀入了"you are the ",#後面的並沒有存放到line中。然後程式執行結果應該是這樣的:

please cin a line:you are the #best!

the line you give is:you are the 

而且這裡把終止符設為#,你輸入的時候就算輸入幾個回車換行也沒關係,輸入流照樣會讀入,譬如

please cin a line:you are the best!

//這裡輸入了乙個回車換行

thank you!

# //終止讀入

the line you give is:you are the best!

//換行照樣讀入並且輸出

thank you!

以上就是getline()函式乙個小小的例項了。

2.那麼如果把getline()作為while的判斷語句會怎麼樣呢?

讓我們一起來分析一下while(getline(cin,line))語句

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

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

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

c++中本質上有兩種getline函式:

一種在標頭檔案中,是istream類的成員函式

一種在標頭檔案中,是普通函式。

在中的getline函式有兩種過載形式:

istream& getline (char* s, streamsize n );istream& getline (char* s, streamsize n, char delim );

作用是從istream中讀取至多n個字元儲存在s對應的陣列中。即使還沒讀夠n個字元,如果遇到換行符'\n'(第一種形式)或delim(第二種形式),則讀取終止,'\n'或delim都不會被儲存進s對應的陣列中。

#include using namespace std;

int main()

在中的getline函式有四種過載形式:

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

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

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

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

用法和上一種類似,不過要讀取的istream是作為引數is傳進函式的。讀取的字串儲存在string型別的str中。

#include #include using namespace std;

int main()

函式過載的一些問題

面試問題 void fun int,double void fun double,int 現在呼叫fun int int 會怎麼樣?函式過載的匹配過程有三步 1 確定候選函式,兩個原則 1 函式名相同 2 在呼叫點函式可見。顯然對於該題目來說兩個函式都是候選函式。2 確定可行函式,也是有兩個原則 1...

箭頭函式的一些問題

在普通函式中,this指向根據其使用場景不同改變。而箭頭函式中的this始終指向其父級作用域 var person p 此時的this並不是指向例項物件,而是指向父級作用域,指向window,所以不能作為建構函式 如果想要實現不定引數的呼叫,就使用.剩餘引數實現 var sayhi b consol...

wait函式的一些問題

1 include 23 若成功則返回程序id,若出錯則返回 1 4 pid t wait int statloc 56 pid t waitpid pid t pid,int statloc,int options 當乙個程序正常或異常終止時,核心就向其父程序傳送sigchld訊號。因為子程序終止...