C++中getline()和get()的辦法淺析。本站提示廣大學習愛好者:(C++中getline()和get()的辦法淺析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中getline()和get()的辦法淺析正文
最原始的辦法:
獲取輸出流最原始的方式就是cin>>(type)
,但是這種方式在碰到輸出中有空格、制表符或許換行符的時分就會中綴,值得留意的是中綴後空格、制表符或許換行符還持續留在輸出流中。所以最復雜的,我們無法運用cin>>(type)
的方式來讀取包括空格的字符串,比方輸出流中有一句:How are you?運用cin>>(type)
是無法一次性讀取出來的,鑒於此,getline()
辦法和get()
辦法便降生了。
getline()辦法:
getline()
辦法讀取整行,他運用經過回車鍵輸出的換行符來中綴,getline()
辦法有兩個參數,第一個參數用來存儲輸出行的數組的稱號,第二個參數用來表示讀取字符數的大小。getline(name,size)
的辦法的運用進程如下:
1. 從輸出流中讀取一個字符。
2. 假如讀取數量到達size-1,將該字符存儲到name數組,刪除輸出流中的該字符,跳轉到5。
3. 假如該字符是換行符,刪除輸出流中的該字符,跳轉到5。
4. 否則,將該字符存儲到name數組,刪除輸出流中的該字符,跳轉到1。
5. 在name中開頭添加空字符,完畢。
上面的代碼是運用原始辦法和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,由於name1前面是空格,但是空格符是保存的,由於在name2中讀取的後果是” name2 name3”。
get()辦法:
get()
的參數和運用辦法與getline()
辦法分歧,獨一的區別就是get()
辦法在碰到換行符是不對輸出流中的換行符停止刪除。這樣我們讀取輸出流的進程就會發生一個問題,怎樣跳過換行符,僥幸的是get()
辦法提供了一種變體,cin.get()
讀取下一個字符,包括換行符,上面的例子粉飾了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; }
運轉後果:
getline()和get()辦法讀取空行的問題:
所謂空行,就是輸出流中只要換行符,當getline()
和get()
辦法碰到空行時,會設置生效位,使前面一切的輸出都中綴,我們剖析上面的代碼:
#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,回車,這時name1中讀取的是this is name1,接上去遇到回車就中綴了,在接上去name2讀取的時分輸出流就成為空行了,這就招致前面的cin.get()
都沒有了效果,也就是下面順序總會一閃而過。由於get()
辦法碰到了中綴招致一切的輸出都中綴。碰都這種問題的處理辦法是在讀取輸出流之前調用cin.clear()
辦法來恢復輸出。
#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; }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家學習或許運用PHP能有所協助,假如有疑問大家可以留言交流,謝謝大家對的支持。