C++中g(shù)etline()和get()的方法淺析
最原始的方法:
獲取輸入流最原始的形式就是cin>>(type)
,但是這種形式在碰到輸入中有空格、制表符或者換行符的時(shí)候就會中斷,值得注意的是中斷后空格、制表符或者換行符還繼續(xù)留在輸入流中。所以最簡單的,我們無法使用cin>>(type)
的形式來讀取包含空格的字符串,比如輸入流中有一句:How are you?使用cin>>(type)
是無法一次性讀取出來的,鑒于此,getline()
方法和get()
方法便誕生了。
getline()方法:
getline()
方法讀取整行,他使用通過回車鍵輸入的換行符來中斷,getline()
方法有兩個(gè)參數(shù),第一個(gè)參數(shù)用來存儲輸入行的數(shù)組的名稱,第二個(gè)參數(shù)用來表示讀取字符數(shù)的大小。getline(name,size)
的方法的使用過程如下:
1. 從輸入流中讀取一個(gè)字符。
2. 如果讀取數(shù)量達(dá)到size-1,將該字符存儲到name數(shù)組,刪除輸入流中的該字符,跳轉(zhuǎn)到5。
3. 如果該字符是換行符,刪除輸入流中的該字符,跳轉(zhuǎn)到5。
4. 否則,將該字符存儲到name數(shù)組,刪除輸入流中的該字符,跳轉(zhuǎn)到1。
5. 在name中結(jié)尾添加空字符,結(jié)束。
下面的代碼是使用原始方法和getline()
方法的比較:
#include <iostream> using namespace std; int main() { const int arrayLength = 20; char name1[arrayLength]; char name2[arrayLength]; cout<<"Enter your name1:\n"; cin>>name1; cout<<"Enter your name2:\n"; cin.getline(name2,arrayLength); cout<<"name1: "<<name1<<endl; cout<<"name2: "<<name2<<endl; cin.get(); return 0; }
分析:我們在輸入流中輸入name1 name2 name3,然后cin>>name1
會讀取name1,因?yàn)閚ame1后面是空格,但是空格符是保留的,因?yàn)樵趎ame2中讀取的結(jié)果是” name2 name3”。
get()方法:
get()
的參數(shù)和使用方法與getline()
方法一致,唯一的區(qū)別就是get()
方法在碰到換行符是不對輸入流中的換行符進(jìn)行刪除。這樣我們讀取輸入流的過程就會產(chǎn)生一個(gè)問題,怎么跳過換行符,幸運(yùn)的是get()
方法提供了一種變體,cin.get()
讀取下一個(gè)字符,包括換行符,下面的例子掩飾了cin.get(name,size)
和cin.get()
的使用:
#include <iostream> using namespace std; int main() { const int arrayLength = 40; char name1[arrayLength]; cout<<"Enter your name1:\n"; cin.get(name1,arrayLength); cin.get(); cout<<"name1: "<<name1<<endl; cin.get(); return 0; }
運(yùn)行結(jié)果:
getline()和get()方法讀取空行的問題:
所謂空行,就是輸入流中只有換行符,當(dāng)getline()
和get()
方法碰到空行時(shí),會設(shè)置失效位,使后面所有的輸入都中斷,我們分析下面的代碼:
#include <iostream> using namespace std; int main() { const int arrayLength = 40; char name1[arrayLength]; char name2[arrayLength]; cout<<"Enter your name1:\n"; cin.get(name1,arrayLength); cout<<"Enter your name2:\n"; cin.get(name2,arrayLength); cout<<"name1: "<<name1<<endl; cout<<"name2: "<<name2<<endl; cin.get(); cin.get(); return 0; }
比如我們輸入this is name1,回車,這時(shí)name1中讀取的是this is name1,接下來遇到回車就中斷了,在接下來name2讀取的時(shí)候輸入流就成為空行了,這就導(dǎo)致后面的cin.get()
都沒有了效果,也就是上面程序總會一閃而過。因?yàn)?code>get()方法碰到了中斷導(dǎo)致所有的輸入都中斷。碰都這種問題的解決方法是在讀取輸入流之前調(diào)用cin.clear()
方法來恢復(fù)輸入。
#include <iostream> using namespace std; int main() { const int arrayLength = 40; char name1[arrayLength]; char name2[arrayLength]; cout<<"Enter your name1:\n"; cin.get(name1,arrayLength); cout<<"Enter your name2:\n"; cin.get(name2,arrayLength); cout<<"name1: "<<name1<<endl; cout<<"name2: "<<name2<<endl; cin.clear(); cin.get(); cin.get(); return 0; }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用PHP能有所幫助,如果有疑問大家可以留言交流,謝謝大家對我們的支持。
您可能感興趣的文章
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10APUE筆記之:進(jìn)程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10如何尋找數(shù)組中的第二大數(shù)


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什