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

C++面向行輸入之get()與getline()實(shí)例詳解

 更新時(shí)間:2021年10月11日 10:45:12   作者:Quirkygbl  
在c++里當(dāng)我們輸入一個(gè)字符串時(shí)習(xí)慣用cin,但是cin只能讀取一段不含空格的字符串,如果我們需要讀取一段包含空格的字符串時(shí),就需要用到getline()或get(),下面這篇文章主要給大家介紹了關(guān)于C++面向行輸入之get()與getline()的相關(guān)資料,需要的朋友可以參考下

引入:

char a = 's';//這樣的語句合法
char b = "s";//不合法
/*
"S"不是字符常量,他表示兩個(gè)字符(S和\0)組成的字符串。
并且"S"表示的的是字符串所在的內(nèi)存地址,相當(dāng)于將一個(gè)內(nèi)存地址賦給b
*/

cin使用空格、制表符、換行符來確定字符串的結(jié)束位置,這意味著cin在獲取字符數(shù)組時(shí)只讀取一個(gè)單詞。讀取該單詞后,cin將該字符串放到該數(shù)組中,并自動(dòng)在結(jié)尾添加空字符。

e.g.

char a[30];
char b[30];
cin>>a;
cin>>b;

當(dāng)你輸入

word1 word2

并敲下回車,cin>>a在word1后檢測到空格結(jié)束

但程序不會(huì)再提示你要輸入b

程序把word2留在輸入隊(duì)列中,當(dāng)cin在輸入隊(duì)列中搜索時(shí),發(fā)現(xiàn)了word2,cin讀取word2并將它放在b數(shù)組中

getline()

讀取整行

通過回車鍵輸入的換行符來確定輸入結(jié)尾

可以使用cin.getline() 該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是用來儲(chǔ)存輸入行的數(shù)組名稱,第二個(gè)參數(shù)是要讀取的字符數(shù)(如果這個(gè)數(shù)是20,則函數(shù)最多讀取19個(gè)字符,余下的空間用于存儲(chǔ)自動(dòng)在結(jié)尾處添加的空字符)。

getline()成員函數(shù)在讀取指定數(shù)目的字符或遇到換行符時(shí)停止讀取

!每次讀取一行,通過換行符來確定行尾,但不保存換行符,相反,在存儲(chǔ)字符串時(shí),用空字符來替換換行符!

get()

讀取整行(同getline())

通過回車鍵輸入的換行符來確定輸入結(jié)尾(同getline())

可以使用cin.get() 與getline()函數(shù)接收的參數(shù)相同,解釋參數(shù)的方式也相同。并且都讀取到行尾

!但是,get不再讀取并丟棄換行符,而是將其留在輸入隊(duì)列中!

解決方法:

可以用不帶參數(shù)的get()函數(shù)來處理換行符

cin.get(name,ArSize);
cin.get();
cin.get(dessert,ArSize);

將兩個(gè)類成員拼接起來

cin.get(name,ArSize).get();

​ 可以這樣操作是因?yàn)閏in.get(name,ArSize)返回一個(gè)cin對象,該對象隨后被用來調(diào)用get()函數(shù)

同樣,可以把輸入中連續(xù)的兩行分別讀入兩個(gè)數(shù)組中

cin.getline(name1,ArSize).getline(name2,ArSize);

差異

1、為什么有時(shí)候用get而不用getline呢?

老式實(shí)現(xiàn)沒有g(shù)etline(),其次get()使輸入更仔細(xì)

getline()使用起來簡單一些,但get()使得檢查錯(cuò)誤更簡單些

2、如何判斷get是因?yàn)樽x取了整行而停止還是因?yàn)閿?shù)組已填滿?

查看下一個(gè)字符,如果是換行符,說明已讀取了整行輸入,否則,該行中還有其他輸入

可能出現(xiàn)問題

1、空行

這兩種函數(shù)的下一條輸入語句將在上一次結(jié)束讀取的位置開始讀取

get()讀取空行后設(shè)置失效位時(shí),意味著接下來的輸入將被阻斷,但可以用cin.clear()命令來恢復(fù)輸入

2、輸入的字符串可能比分配的空間長

如果輸入行包含的比指定的多,則兩種函數(shù)會(huì)把余下的字符留在輸入隊(duì)列中,而getline()還會(huì)設(shè)置失效位,并關(guān)閉后面的輸入

3、混合輸入數(shù)字和字符串導(dǎo)致的問題

cin輸入一個(gè)數(shù)字類型,按下回車時(shí),換行符留在了輸入隊(duì)列,下一次被getline()等看到換行符,將認(rèn)為是一個(gè)空行,直接賦給數(shù)組

解決方法是讀取地址之前丟棄換行符

可以用(cin>>year).get()或者cin>>year;get();

關(guān)于string使用getline()

C++添加了string類擴(kuò)展了C++庫。因此可以用string類型的變量而不是字符數(shù)組來存儲(chǔ)字符串。要使用string類,必須包含頭文件string。

一般字符數(shù)組和string變量使用getline()方法是不同的。

    char a[100];
    string str;
 
    cin.getline(a,100);
    getline(cin,str);

cin.getline()這種是句點(diǎn)表示法,函數(shù)getline()是istream類的一個(gè)類方法。getline(cin,str)沒有用到句點(diǎn)表示法,這表明這個(gè)getline()不是類方法。它將cin作為參數(shù),指出到哪里去查找輸入。另外,也沒有指出字符串的長度,因?yàn)閟tring對象會(huì)根據(jù)輸入的串的大小自動(dòng)調(diào)整自身的大小。

為什么第二個(gè)getline()不是istream的類方法呢。在引入string類之前很久,C++就有了istream類。因此istream的設(shè)計(jì)考慮到了諸如double和int等基本C++數(shù)據(jù)類型,但沒有考慮到string類型,所以string類中,有處理double,int和其他基本類型的類方法,但沒有處理string對象的類方法。

但cin方法也適用與string類對象,這涉及到友元函數(shù),這里先不闡述。

總結(jié)

到此這篇關(guān)于C++面向行輸入之get()與getline()的文章就介紹到這了,更多相關(guān)C++面向行輸入get()與getline()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言在屏幕上輸出楊輝三角

    C語言在屏幕上輸出楊輝三角

    這篇文章主要介紹了在屏幕上輸出楊輝三角的方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 淺析C++ new的三種面貌

    淺析C++ new的三種面貌

    這篇文章主要介紹了C++ new的三種面貌,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++字符串提取和分割的多種方法

    C++字符串提取和分割的多種方法

    在C++編程中,字符串處理是一個(gè)常見的任務(wù),尤其是在需要從字符串中提取特定數(shù)據(jù)時(shí),本文將詳細(xì)探討如何使用C++標(biāo)準(zhǔn)庫中的工具來提取和分割字符串,并分析不同方法的適用場景和優(yōu)缺點(diǎn),我們將通過多個(gè)示例代碼逐步講解,幫助讀者掌握字符串處理的技巧,需要的朋友可以參考下
    2025-03-03
  • VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總

    VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總

    這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對于更好的了解OpenGL很有幫助,需要的朋友可以參考下
    2014-07-07
  • 基于C++泛型編程職工管理系統(tǒng)

    基于C++泛型編程職工管理系統(tǒng)

    這篇文章主要介紹了基于C++泛型編程職工管理系統(tǒng),前面介紹到了C++的泛型編程,并實(shí)現(xiàn)了萬能容器,不過那使用的是數(shù)組,今天呢咱帶大家實(shí)踐一下使用泛型技術(shù),結(jié)合單鏈表實(shí)現(xiàn)一個(gè)職工管理系統(tǒng),需要的朋友可以參考一下
    2022-02-02
  • C語言qsort()函數(shù)的使用方法詳解

    C語言qsort()函數(shù)的使用方法詳解

    qsort是一個(gè)庫函數(shù),基于快速排序算法實(shí)現(xiàn)的一個(gè)排序的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言qsort()函數(shù)使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • C++引用的使用與const修飾符

    C++引用的使用與const修飾符

    這篇文章介紹了C++引用使用與const修飾符,引用是給已經(jīng)定義的變量一個(gè)別名,可以簡單理解成同一個(gè)變量的昵稱,既然是昵稱或者是別名,顯然它和原本的變量名有著同樣的效力,所以我們對別名進(jìn)行修改,原本的變量值也一樣會(huì)發(fā)生變化,下面來看看詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-11-11
  • C++17文件系統(tǒng)庫之std::filesystem 示例詳解

    C++17文件系統(tǒng)庫之std::filesystem 示例詳解

    std::filesystem是C++17引入的一個(gè)強(qiáng)大且易用的文件系統(tǒng)操作庫,它提供了跨平臺(tái)的文件系統(tǒng)操作接口,簡化了文件和目錄操作的代碼實(shí)現(xiàn),本文給大家介紹C++17文件系統(tǒng)庫之std::filesystem 示例詳解,感興趣的朋友一起看看吧
    2025-03-03
  • 詳解QT使用http通信的同步和異步

    詳解QT使用http通信的同步和異步

    在Qt與Http通信的時(shí)候,會(huì)根據(jù)不同的情況使用同步或者異步的方式進(jìn)行數(shù)據(jù)請求,下面我們就來深入了解一下http通信的同步和異步的相關(guān)知識(shí),感興趣的小伙伴可以了解下
    2023-12-12
  • C++的拷貝構(gòu)造函數(shù)你了解嗎

    C++的拷貝構(gòu)造函數(shù)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的拷貝構(gòu)造函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

聊城市| 仁怀市| 京山县| 枣庄市| 西华县| 晴隆县| 淮阳县| 清水河县| 公主岭市| 志丹县| 肥西县| 惠来县| 洱源县| 安达市| 来宾市| 鄯善县| 杭锦旗| 乌审旗| 右玉县| 前郭尔| 绥宁县| 永城市| 施秉县| 正阳县| 崇左市| 即墨市| 西平县| 桐城市| 岱山县| 翁源县| 新野县| 新沂市| 东城区| 镇坪县| 丹寨县| 增城市| 瓦房店市| 三河市| 平凉市| 泸水县| 上蔡县|