最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中g(shù)etline()和get()的方法淺析

 更新時(shí)間:2016年10月26日 10:37:09   投稿:daisy  
大家都知道作為C++獲取輸入流的方法,幾乎在任何一本資料書上getline()方法和get()方法都作為入門級的方法進(jìn)行講述,即便如此,筆者在學(xué)習(xí)C++的過程中仍經(jīng)常忘記這二者的使用要點(diǎn),可能也有C++的初學(xué)者對這兩個(gè)方法還心存疑慮,本篇文章就這兩個(gè)方法的使用進(jìn)行簡要闡述。

最原始的方法:

獲取輸入流最原始的形式就是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能有所幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C++插入排序算法實(shí)例詳解

    C++插入排序算法實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了C++插入排序算法實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • C++遞歸算法處理島嶼問題詳解

    C++遞歸算法處理島嶼問題詳解

    這篇文章主要介紹了用遞歸算法解決島嶼問題的流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • C語言中system()函數(shù)的用法總結(jié)

    C語言中system()函數(shù)的用法總結(jié)

    system()函數(shù)功能強(qiáng)大。以下小編就為大家介紹一下在C語言中system()函數(shù)的用法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解

    C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解

    這篇文章主要為大家介紹了C++面試八股文之STL標(biāo)準(zhǔn)模板庫使用詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • C語言打印某一年的日歷

    C語言打印某一年的日歷

    這篇文章主要為大家詳細(xì)介紹了C語言打印某一年的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++中用棧來判斷括號字符串匹配問題的實(shí)現(xiàn)方法

    C++中用棧來判斷括號字符串匹配問題的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++中用棧來判斷括號字符串匹配問題的實(shí)現(xiàn)方法,是一個(gè)比較實(shí)用的算法技巧,包含了關(guān)于棧的基本操作,需要的朋友可以參考下
    2014-08-08
  • C/C++整數(shù)乘積的溢出問題的解決

    C/C++整數(shù)乘積的溢出問題的解決

    整數(shù)乘積的溢出問題是指兩個(gè)整數(shù)相乘得到的結(jié)果超過了所能表示的數(shù)據(jù)類型的范圍,本文給大家介紹了C/C++整數(shù)乘積的溢出問題的解決,需要的朋友可以參考下
    2024-02-02
  • C語言進(jìn)階棧幀示例詳解教程

    C語言進(jìn)階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語言進(jìn)階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • 解析C++各種變量及區(qū)別

    解析C++各種變量及區(qū)別

    在日常開發(fā)中,我們經(jīng)常使用變量,常量,變量可以分為:全局變量、局部變量、靜態(tài)全局變量、靜態(tài)局部變量,接下來通過本文給大家介紹C++各種變量及區(qū)別,感興趣的朋友一起看看吧
    2022-05-05
  • fcntl函數(shù)的使用詳解

    fcntl函數(shù)的使用詳解

    本篇文章是對fcntl函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

惠来县| 同仁县| 台安县| 镇沅| 义马市| 永新县| 宁夏| 呼图壁县| 吉首市| 新泰市| 依安县| 雷山县| 崇义县| 湘潭市| 西城区| 垣曲县| 北京市| 正镶白旗| 定南县| 通化县| 东台市| 开化县| 泰宁县| 彰化市| 九寨沟县| 饶河县| 明光市| 喀什市| 化州市| 鹤壁市| 大石桥市| 金乡县| 喀什市| 封丘县| 天水市| 桂阳县| 黑河市| 名山县| 阿克陶县| 乌海市| 临高县|