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

C++的get()函數(shù)與getline()函數(shù)使用詳解

 更新時(shí)間:2015年09月24日 15:44:12   投稿:goldensun  
這篇文章主要介紹了C++的get()函數(shù)與getline()函數(shù)使用詳解,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C++ get()函數(shù)讀入一個(gè)字符
get()函數(shù)是cin輸入流對(duì)象的成員函數(shù),它有3種形式:無(wú)參數(shù)的,有一個(gè)參數(shù)的,有3個(gè)參數(shù)的。
1) 不帶參數(shù)的get函數(shù)
其調(diào)用形式為

  cin.get()


用來(lái)從指定的輸入流中提取一個(gè)字符(包括空白字符),函數(shù)的返回值就是讀入的字符。 若遇到輸入流中的文件結(jié)束符,則函數(shù)值返回文件結(jié)束標(biāo)志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考慮到不與字符的ASCII代碼混淆,但不同的C ++系統(tǒng)所用的EOF值有可能不同。

[例] 用get函數(shù)讀入字符。

#include <iostream>
using namespace std;
int main( )
{
int c;
cout<<"enter a sentence:"<<endl;
while((c=cin.get())!=EOF)
cout.put(c);
return 0;
}


運(yùn)行情況如下:

enter a sentence:
I study C++ very hard.↙(輸入一行字符)
I study C++ very hard.       (輸出該行字符)
^Z↙(程序結(jié)束)

C語(yǔ)言中的getchar函數(shù)與流成員函數(shù)cin.get( )的功能相同,C++保留了C的這種用法,可以用getchar(c)從鍵盤(pán)讀入一個(gè)字符賦給c。

2) 有一個(gè)參數(shù)的get函數(shù)
其調(diào)用形式為

 cin.get(ch)

其作用是從輸入流中讀取一個(gè)字符,賦給字符變量ch。如果讀取成功則函數(shù)返回true(真),如失敗(遇文件結(jié)束符) 則函數(shù)返回false(假)。上面的例子可以改寫(xiě)如下:

#include <iostream>
using namespace std;
int main( )
{
  char c;
  cout<<"enter a sentence:"<<endl;
  while(cin.get(c)) //讀取一個(gè)字符賦給字符變量c,如果讀取成功,cin.get(c)為真
  {cout.put(c);}
  cout<<"end"<<endl;
  return 0;
}

3) 有3個(gè)參數(shù)的get函數(shù)
其調(diào)用形式為
    cin.get(字符數(shù)組, 字符個(gè)數(shù)n, 終止字符)

    cin.get(字符指針, 字符個(gè)數(shù)n, 終止字符)
其作用是從輸入流中讀取n-1個(gè)字符,賦給指定的字符數(shù)組(或字符指針指向的數(shù)組),如果在讀取n-1個(gè)字符之前遇到指定的終止字符,則提前結(jié)束讀取。如果讀取成功則函數(shù)返回true(真),如失敗(遇文件結(jié)束符) 則函數(shù)返回false(假)。再將例13.6改寫(xiě)如下:

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cout<<"enter a sentence:"<<endl;
  cin.get(ch,10,'\\n');//指定換行符為終止字符
 cout<<ch<<endl;
  return 0;
}

運(yùn)行情況如下:

enter a sentence:
I study C++ very hard.↙
I study

在輸入流中有22個(gè)字符,但由于在get函數(shù)中指定的n為10,讀取n -1個(gè)(即9個(gè))字符并賦給字符數(shù)組ch中前9個(gè)元素。有人可能要問(wèn):指定n-10,為什么只讀取9個(gè)字符呢?因?yàn)榇娣诺氖且粋€(gè)字符串,因此在9個(gè)字符之后要加入一個(gè)字符串結(jié)束標(biāo)志,實(shí)際上存放到數(shù)組中的是10個(gè)字符。請(qǐng)讀者思考:如果不加入字符串結(jié)束標(biāo)志,會(huì) 出現(xiàn)什么情況?結(jié)果是:在用“cout<<ch”;輸出數(shù)組中的字符時(shí),不是輸出讀入的字符串,而是數(shù)組中的全部元素。大家可以親自測(cè)試一下ch[9](即數(shù)組中第10個(gè)元素)的值是什么。

如果輸入↙

  abcde

即未讀完第9個(gè)字符就遇到終止字符、讀取操作終止,前5個(gè)字符已存放到數(shù)組ch[0]到ch[4]中,ch[5]中存放'\0'。

如果在get函數(shù)中指定的n為20,而輸入22個(gè)字符,則將輸入流中前19個(gè)字符賦給字符數(shù)組ch中前19個(gè)元素,再加入一個(gè)'\0'。

get函數(shù)中第3個(gè)參數(shù)可以省寫(xiě),此時(shí)默認(rèn)為'\n'。下面兩行等價(jià):

  cin.get(ch,10,'\\n');
  cin.get(ch,10);


終止字符也可以用其他字符。如

  cin.get(ch,10,'x');


在遇到字符'x'時(shí)停止讀取操作。

C++ getline()函數(shù)讀入一行字符
getline函數(shù)的作用是從輸入流中讀取一行字符,其用法與帶3個(gè)參數(shù)的get函數(shù)類(lèi)似。即
    cin.getline(字符數(shù)組(或字符指針), 字符個(gè)數(shù)n, 終止標(biāo)志字符)

[例] 用getline函數(shù)讀入一行字符。

#include <iostream>
using namespace std;
int main( )
{
  char ch[20];
  cout<<"enter a sentence:"<<endl;
  cin>>ch;
  cout<<"The string read with cin is:"<<ch<<endl;
  cin.getline(ch,20,'/'); //讀個(gè)字符或遇'/'結(jié)束
  cout<<"The second part is:"<<ch<<endl;
  cin.getline(ch,20); //讀個(gè)字符或遇'/n'結(jié)束
  cout<<"The third part is:"<<ch<<endl;
  return 0;
}

程序運(yùn)行情況如下:

enter a sentence: I like C++./I study C++./I am happy.↙
The string read with cin is:I
The second part is: like C++.
The third part is:I study C++./I am h

請(qǐng)仔細(xì)分析運(yùn)行結(jié)果。用“cin>>”從輸入流提取數(shù)據(jù),遇空格就終止。因此只讀取 一個(gè)字符'I',存放在字符數(shù)組元素ch[0]中,然后在ch[1]中存放'\0'。因此用"cout<<ch"輸出時(shí),只輸出一個(gè)字符'I'。然后用cin.getline(ch, 20, '/')從輸入流讀取19個(gè)字符 (或遇結(jié)束)。請(qǐng)注意:此時(shí)并不是從輸入流的開(kāi)頭讀取數(shù)據(jù)。在輸入流中有一個(gè)字符指針,指向當(dāng)前應(yīng)訪問(wèn)的字符。在開(kāi)始時(shí),指針指向第一個(gè)字符,在讀入第一個(gè)字符'I'后,指針就移到下一個(gè)字符('I'后面的空格),所以getline函數(shù)從空格讀起,遇到就停止,把字符串" like c++."存放到ch[0]開(kāi)始的10個(gè)數(shù)組元素中,然后用"cout<<ch"輸出這10個(gè)字符。注意:遇終止標(biāo)志字符"/"時(shí)停止讀取并不放到數(shù)組中。再用cin.getline(ch, 20)讀19個(gè)字符(或遇'/n'結(jié)束),由于未指定以'/'為結(jié)束標(biāo)志,所以第2個(gè)'/'被當(dāng)作一般字符讀取,共讀入19個(gè)字符,最后輸出這19個(gè)字符。

有幾點(diǎn)說(shuō)明并請(qǐng)讀者思考:
1) 如果第2個(gè)cin.getline函數(shù)也寫(xiě)成cin. getline(ch, 20, '/''),輸出結(jié)果會(huì)如何? 此時(shí)最后一行的輸出為:

  The third part is: I study C++.

2) 如果在用cin.getline(ch, 20, '/')從輸入流讀取數(shù)據(jù)時(shí),遇到回車(chē)鍵("\n"),是否 結(jié)束讀???結(jié)論是此時(shí)"\n"不是結(jié)束標(biāo)志"\n"被作為一個(gè)字符被讀入。

3) 用getline函數(shù)從輸入流讀字符時(shí),遇到終止標(biāo)志字符時(shí)結(jié)束,指針移到該終止標(biāo)志字符之后,下一個(gè)getline函數(shù)將從該終止標(biāo)志的下一個(gè)字符開(kāi)始接著讀入,如本程序運(yùn)行結(jié)果所示那樣。如果用cin.get函數(shù)從輸入流讀字符時(shí),遇終止標(biāo)志字符時(shí)停止讀取,指針不向后移動(dòng),仍然停留在原位置。下一次讀取時(shí)仍從該終止標(biāo)志字符開(kāi)始。這是getline函數(shù)和get函數(shù)不同之處。假如把例子程序中的兩個(gè)cin.line函數(shù)調(diào)用都改為以下函數(shù)調(diào)用:

  cin.getline(ch, 20, '/');


則運(yùn)行結(jié)果為:

enter a sentence: I like C++./I study C++./I am happy.↙
The string read with cin is: I
The second part is: like C++.
The third part is:  (沒(méi)有從輸人流中讀取有效字符)

第2個(gè)cin. getline(ch, 20, '/')從指針當(dāng)前位置起讀取字符,遇到的第1個(gè)字符就是終止標(biāo)志字符讀入結(jié)束,只把"\0"存放到ch[0]中,所以用“cout<<ch”輸出時(shí)無(wú)字符輸出。

因此用get函數(shù)時(shí)要特別注意,必要時(shí)用其他方法跳過(guò)該終止標(biāo)志字符(如用后面介紹的ignore函數(shù),詳情請(qǐng)查看:一些與輸入有關(guān)的istream類(lèi)成員函數(shù)),但一般來(lái)說(shuō)還是用getline函數(shù)更方便。

4) 請(qǐng)比較用“cin<<”和用成員函數(shù)cin.getline()讀數(shù)據(jù)的區(qū)別。用“cin<<”讀數(shù)據(jù)時(shí)以空白字符(包括空格、tab鍵、回車(chē)鍵)作為終止標(biāo)志,而用cin.getline()讀數(shù)據(jù)時(shí)連續(xù)讀取一系列字符,可以包括空格。用“cin <<”可以讀取C++的標(biāo)準(zhǔn)類(lèi)型的各類(lèi)型數(shù)據(jù)(如果經(jīng)過(guò)重載,還可以用于輸入自定義類(lèi)型的數(shù)據(jù)),而用cin.getline()只用于輸入字符型數(shù)據(jù)。

相關(guān)文章

  • C++小練習(xí)之高性能實(shí)現(xiàn)字符串分割

    C++小練習(xí)之高性能實(shí)現(xiàn)字符串分割

    字符串分割是日常工作中比較常見(jiàn)的基礎(chǔ)函數(shù),通常大家會(huì)使用現(xiàn)成的基礎(chǔ)庫(kù),基礎(chǔ)庫(kù)的性能是否是最佳的,本文主要和大家探討一下如何最大限度的提升字符串分割的性能,希望對(duì)大家有所幫助
    2023-10-10
  • 詳解C語(yǔ)言中常用的失敗退出和成功返回

    詳解C語(yǔ)言中常用的失敗退出和成功返回

    在 C 語(yǔ)言中,封裝函數(shù)時(shí),我們通常需要判斷函數(shù)調(diào)用是否成功,并據(jù)此采取不同的操作,例如,在調(diào)用系統(tǒng)函數(shù)或庫(kù)函數(shù)時(shí),我們通常會(huì)使用一些錯(cuò)誤處理機(jī)制,來(lái)輸出錯(cuò)誤信息、退出程序或返回不同的狀態(tài),以下是如何參考使用這些錯(cuò)誤處理機(jī)制的示例,需要的朋友可以參考下
    2024-12-12
  • C語(yǔ)言實(shí)現(xiàn)文件讀寫(xiě)操作的幾種常用方法

    C語(yǔ)言實(shí)現(xiàn)文件讀寫(xiě)操作的幾種常用方法

    C語(yǔ)言提供了一系列文件操作函數(shù),使得我們可以通過(guò)程序?qū)ξ募M(jìn)行讀寫(xiě)操作,本文主要介紹了C語(yǔ)言實(shí)現(xiàn)文件讀寫(xiě)操作的幾種常用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • C++中rapidjson將map轉(zhuǎn)為json的方法

    C++中rapidjson將map轉(zhuǎn)為json的方法

    今天小編就為大家分享一篇關(guān)于C++中rapidjson將map轉(zhuǎn)為json的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • QT5編譯使用QFtp的方法步驟

    QT5編譯使用QFtp的方法步驟

    這篇文章主要介紹了QT5編譯使用QFtp的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)

    C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)五子棋人人對(duì)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言如何讀取bmp圖像

    C語(yǔ)言如何讀取bmp圖像

    這篇文章主要介紹了C語(yǔ)言如何讀取bmp圖像,BMP即bitmap,由文件頭信息塊、圖像描述信息塊、顏色表、圖像數(shù)據(jù)區(qū)四部分組成,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • 基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

    基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 解析C++中四種強(qiáng)制類(lèi)型轉(zhuǎn)換的區(qū)別詳解

    解析C++中四種強(qiáng)制類(lèi)型轉(zhuǎn)換的區(qū)別詳解

    本篇文章是對(duì)C++中四種強(qiáng)制類(lèi)型轉(zhuǎn)換的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • VC中SDK與MFC的區(qū)別淺析

    VC中SDK與MFC的區(qū)別淺析

    這篇文章主要介紹了VC中SDK與MFC的區(qū)別淺析,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

庆安县| 平舆县| 泽库县| 中山市| 石嘴山市| 开江县| 那曲县| 望城县| 潞西市| 巫溪县| 海伦市| 项城市| 洞口县| 丰县| 桐乡市| 麻栗坡县| 和静县| 汶川县| 龙江县| 嘉善县| 兴国县| 德阳市| 和政县| 黄龙县| 碌曲县| 平湖市| 华阴市| 武胜县| 沙雅县| 民和| 县级市| 巩义市| 江口县| 晋宁县| 昌乐县| 建昌县| 南澳县| 措美县| 阳春市| 兰溪市| 固安县|