getline()函数
生活随笔
收集整理的這篇文章主要介紹了
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()函數,所以,你懂了吧。。。
轉載于:https://www.cnblogs.com/Elaine-DWL/p/6803771.html
總結
以上是生活随笔為你收集整理的getline()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.Lock接口及其实现Reentran
- 下一篇: 百度陆奇最新内部演讲:如何成为一个优秀的