getline()函式
原文地址:http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html
學習所用,謝謝原創作者傳播智慧。如有侵權,請作者及時聯絡,文章將立即刪除,並及時道歉!
學習C++的同學可能都會遇到一個getline()函式,譬如在C++premer中,標準string型別第二小節就是“用getline讀取整行文字”。書上給的程式如下:
int main()
{
string line:
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
大家會發現執行時怎麼也跳不出迴圈,甚至會發生各種莫名其妙的錯誤。這是為什麼呢?在這裡我給大家做一個詳細的講解。
首先給大家介紹一下getline()函式(個人覺得百度百科給的果斷不夠詳細)
大家百度會發現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;
那麼當我輸入"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()函式一個小小的例項了。
那麼如果把getline()作為while的判斷語句會怎麼樣呢?
讓我們一起來分析一下while(getline(cin,line))語句
注意這裡預設回車符停止讀入,按Ctrl+Z或鍵入EOF回車即可退出迴圈。
在這個語句中,首先getline從標準輸入裝置上讀入字元,然後返回給輸入流cin,注意了,是cin,所以while判斷語句的真實判斷物件是cin,也就是判斷當前是否存在有效的輸入流。在這種情況下,我想只要你的電腦不中毒不發神經你的輸入流怎麼會沒有效?所以這種情況下不管你怎麼輸入都跳不出迴圈,因為你的輸入流有效,跳不出迴圈。
然而有些同學誤以為while判斷語句的判斷物件是line(也就是line是否為空),然後想通過直接回車(即輸入一個空的line)跳出迴圈,卻發現怎麼也跳不出迴圈。這是因為你的回車只會終止getline()函式的讀入操作。getline()函式終止後又進行while()判斷(即判斷輸入流是否有效,你的輸入流當然有效,滿足條件),所以又執行getline()函式,所以,你懂了吧。。。
相關文章
- getline函式函式
- C/C++輸入函式 scanf() gets() getline() cin.getline() cin.get() getchar()C++函式
- getline()
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 【Linux】getline解釋Linux
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- 字元函式、數字函式和日期函式字元函式
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 【函式】ORACLE函式大全函式Oracle
- (譯) 函式式 JS #2: 函式!函式JS
- 核函式 多項式核函式 高斯核函式(常用)函式
- 函式名/函式地址/函式指標函式指標
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- main函式的入口函式AI函式
- (函式)實現strstr函式函式
- 字串函式之Strtok()函式字串函式
- SQL函式之日期函式SQL函式
- Oracle聚合函式/分析函式Oracle函式
- fork函式與vfork函式函式
- 常用函式--時間函式函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- 函式式JavaScript(4):函式柯里化函式JavaScript
- 箭頭函式、簡寫函式、普通函式的區別函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- Mysql 常用函式(15)- upper 函式MySql函式
- webgl內建函式--指數函式Web函式