程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中getline()和get()的辦法淺析

C++中getline()和get()的辦法淺析

編輯:關於C++

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能有所協助,假如有疑問大家可以留言交流,謝謝大家對的支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved