(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)

說明:流輸入運算符,在一定程度上為C++程序的開發(fā)提供了很多便利,我們可以避免C語言那種繁瑣的輸入格式,比如在輸入一個數(shù)值時,還需指定其格式,而cin以及cout則不需要。但是cin也有一些缺陷,比如當(dāng)輸入字符串時,遇到空格便截止,舉個例子,如下,我們在輸入“12 23.5 aa bb cc dd”,希望打印出的是前兩個數(shù)值以及后面一個字符串“aa bb cc dd”,但實際打印出來的只有前兩個數(shù)字和“aa”。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、眉縣ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的眉縣網(wǎng)站制作公司

  1 #include <iostream>
  2 using namespace std;
  3 int main()
  4 {
  5     int a;
  6     double b;
  7     string buf;
  8     cin>>a>>b>>buf;
  9     //讀入字符串時遇到空格則止 12 23.5 aa bb cc dd
 10 
 11     cout<<a<<endl;
 12     cout<<b<<endl;
 13     cout<<buf<<endl;
 14     return 0;
 15 }
 16

為了解決諸多如此類的問題,于是C++提供了cin不可或缺的成員函數(shù)。具體用法及區(qū)別一一列舉如下。

?

1.char get() 讀入一個字符并返回(包括回車;tab;空格等空白字符)

示例1:

  1 int main()
  2 {
  3     char ch;
  4 
  5     //EOF為文件結(jié)束符,在windows系統(tǒng)下,用ctrl+z輸入EOF,在linux環(huán)境下為ctrl+d
  6     while((ch = cin.get()) != EOF)
  7         cout<<ch;
  8     return 0;
  9 }

注意:此程序在運行后,可以在鍵盤上任意輸入,屏幕將顯示輸入的所有內(nèi)容,當(dāng)輸入文件結(jié)束符時,退出程序。(所有示例應(yīng)包含<iostream>頭文件,并且使用命名空間std,此處略,詳見說明部分程序。下同)

?

2.istream& get(char&) 讀入一個字符,讀取成功返回非0,讀取失敗(比如遇到文件結(jié)束符)返回0值

示例2:

  1 int main()
  2 {
  3     char ch;
  4 
  5     //get函數(shù)返回的是istream&,可實現(xiàn)鏈?zhǔn)骄幊?  6     while(cin.get(ch))
  7         cout.put(ch);
  8     return 0;
  9 }

?

3. istream& get(char *, int ,char )

istream& get(字符指針,字符個數(shù) n,終止字符)
功能:從輸入流中讀取n-1字符,賦給字符數(shù)組或字符指針?biāo)赶虻臄?shù)組。如果在讀取n-1個字符之前遇到終止字符,則提前結(jié)束。如果成功則返回非0,失敗則返回0。會清空char*指向的空間,未讀到n-1個字符或中止符,則會阻塞。不會越過中止符。在講這個成員函數(shù)之前,先說幾個簡單的cin的其他成員函數(shù),以便于更好地闡述這個函數(shù):

a.istream& ignore(streamsize n = 1, int delim= EOF);

功能:從當(dāng)前指針位置開始,忽略n個字節(jié)字符,直到遇到delim停止,默認(rèn)參數(shù)為忽略一個字節(jié)

b.int peek()

功能:用來查看當(dāng)前指針?biāo)谖恢?用完當(dāng)前指針位置不發(fā)生變化。

c.istream& putback (char c);

功能:往當(dāng)前指針位置插入一個char c;

示例3:

(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)查看代碼
  1 int main()
  2 {
  3     char ch[20];
  4 
  5     //鍵盤輸入i like c/i like c++ also/
  6     cin.get(ch,20,'/');
  7     cout<<"the first part is:"<<ch<<endl<<endl;
  8 
  9     //查看當(dāng)前指針?biāo)谖恢? 10     char peek = cin.peek();
 11     cout<<"the peek is:"<<peek<<endl<<endl;
 12 
 13     //忽略'/'這個字符
 14     cin.ignore(1,'/');
 15     //往當(dāng)前指針位置插入一個char
 16     cin.putback('a');
 17 
 18     peek = cin.peek();
 19     cout<<"the peek is:"<<peek<<endl<<endl;
 20 
 21     cin.get(ch,20,'/');
 22     peek = cin.peek();
 23     cout<<"the second part is:"<<ch<<endl<<endl;
 24     cout<<"the peek is:"<<peek<<endl<<endl;
 25     return 0;
 26 }

程序運行結(jié)果:

(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)

?

4.istream& getline(char *p, int n, char c)

cin.getline(字符數(shù)組或字符指針,字符個數(shù) n,[終止字符])
功能:與帶三個參數(shù)的get()功能類似,從輸入流中讀取n-1字符,賦給字符數(shù)組或字符指針?biāo)赶虻目臻g。如果在讀取n-1個字符之前遇到終止字符(如果不寫,默認(rèn)為’\n’),則提前結(jié)束。會清空char*指向的空間,未讀到n-1個字符或中止符,則會阻塞,會越過中止符。
?
示例3:
  1 int main()
  2 {
  3     char str[1024];

  4     //此處輸入同上,為i like c/i like c++ also/
  5     //輸入20個字符,遇到'/'截止,會越過終止符,不需手動忽略,
  6     //如果不寫終止符,默認(rèn)為'\n'
  7     cin.getline(str,10,'/');
  8     cout<<str<<endl;
  9     cin.getline(str,10,'/');
 10     cout<<str<<endl;
 11     return 0;
 12 }

程序運行結(jié)果:

(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)

?

需要注意的是:

get和getline最大的區(qū)別就是,get遇到界定符時,停止執(zhí)行,但并不從流中提取界定符,再次調(diào)用會遇到同一個界定符,函數(shù)將立即返回,不會提取輸入。getline則不同,它將從輸入流中提取界定符,但傷然不會把它放到緩沖區(qū)中。簡單來說就是前者不會自動忽略界定符,而后者會。

?

5.ostream put(char p)

功能:輸出一個字符,返回值為ostream類型,可實現(xiàn)鏈?zhǔn)骄幊?/strong>

示例:

  1 int main()
  2 {
  3     char str[] = "programming with with C++";
  4     for(unsigned int i = 0;i <sizeof(str)/sizeof(str[0]);i++)
  5     {
  6         //輸出一個字符,返回類型為ostream,以實現(xiàn)再次調(diào)用(如下)
  7         cout.put(str[i]).put('x');
  8     }
  9     return 0;
 10 }

程序運行結(jié)果:

(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)

當(dāng)前題目:(C/C++學(xué)習(xí))3.C++中cin的成員函數(shù)
文章URL:http://muchs.cn/article12/gdcigc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、網(wǎng)站收錄、App設(shè)計品牌網(wǎng)站設(shè)計、Google微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)