C++中與輸入相關(guān)的istream類成員函數(shù)簡(jiǎn)介
eof 函數(shù)
eof是end of file的縮寫(xiě),表示“文件結(jié)束”。從輸入流讀取數(shù)據(jù),如果到達(dá)文件末尾(遇文件結(jié)束符),eof函數(shù)值為非零值(真),否則為0(假)。
[例] 逐個(gè)讀入一行字符,將其中的非空格字符輸出。
#include <iostream> using namespace std; int main( ) { char c; while(!cin.eof( )) //eof( )為假表示未遇到文件結(jié)束符 if((c=cin.get( ))!=' ') //檢查讀入的字符是否為空格字符 cout.put(c); return 0; }
運(yùn)行情況如下:
C++ is very interesting.↙ C++isveryinteresting. ^Z(結(jié)束)
peek函數(shù)
peek是“觀察”的意思,peek函數(shù)的作用是觀測(cè)下一個(gè)字符。其調(diào)用形式為:
c=cin.peek( );
函數(shù)的返回值是指針指向的當(dāng)前字符,但它只是觀測(cè),指針仍停留在當(dāng)前位置,并不后移。如果要訪問(wèn)的字符是文件結(jié)束符,則函數(shù)值是EOF(-1)。
putback函數(shù)
其調(diào)用形式為
cin.putback(ch);
其作用是將前面用get或getline函數(shù)從輸入流中讀取的字符ch返回到輸入流,插入到當(dāng)前指針位置,以供后面讀取。
[例] peek函數(shù)和putback函數(shù)的用法。
#include <iostream> using namespace std; int main( ) { char c[20]; int ch; cout<<"please enter a sentence:"<<endl; cin.getline(c,15,'/'); cout<<"The first part is:"<<c<<endl; ch=cin.peek( ); //觀看當(dāng)前字符 cout<<"The next character(ASCII code) is:"<<ch<<endl; cin.putback(c[0]); //將'I'插入到指針?biāo)柑? cin.getline(c,15,'/'); cout<<"The second part is:"<<c<<endl; return 0; }
運(yùn)行情況如下:
please enter a sentence: I am a boy./ am a student./↙ The first part is:I am a boy. The next character(ASCII code) is:32(下一個(gè)字符是空格) The second part is:I am a student
ignore函數(shù)
其調(diào)用形式為
cin.ignore(n, 終止字符)
函數(shù)作用是跳過(guò)輸入流中n個(gè)字符,或在遇到指定的終止字符時(shí)提前結(jié)束(此時(shí)跳過(guò)包括終止字符在內(nèi)的若干字符)。如
ighore(5, 'A') //跳過(guò)輸入流中個(gè)字符,遇'A'后就不再跳了
也可以不帶參數(shù)或只帶一個(gè)參數(shù)。如
ignore( ) // n默認(rèn)值為,終止字符默認(rèn)為EOF
相當(dāng)于
ignore(1, EOF)
[例] 用ignore函數(shù)跳過(guò)輸入流中的字符。先看不用ignore函數(shù)的情況:
#include <iostream> using namespace std; int main( ) { char ch[20]; cin.get(ch,20,'/'); cout<<"The first part is:"<<ch<<endl; cin.get(ch,20,'/'); cout<<"The second part is:"<<ch<<endl; return 0; }
運(yùn)行結(jié)果如下:
I like C++./I study C++./I am happy.↙ The first part is:I like C++. The second part is:(字符數(shù)組ch中沒(méi)有從輸入流中讀取有效字符)
如果希望第二個(gè)cin.get函數(shù)能讀取"I study C++.",就應(yīng)該設(shè)法跳過(guò)輸入流中第一個(gè)'/',可以用ignore函數(shù)來(lái)實(shí)現(xiàn)此目的,將程序改為:
#include <iostream> using namespace std; int main( ) { char ch[20]; cin.get(ch,20,'/'); cout<<"The first part is:"<<ch<<endl; cin.ignore( );//跳過(guò)輸入流中一個(gè)字符 cin.get(ch,20,'/'); cout<<"The second part is:"<<ch<<endl; return 0; }
運(yùn)行結(jié)果如下:
I like C++./I study C++./I am happy.↙ The first part is:I like C++. The second part is:I study C++.
以上介紹的各個(gè)成員函數(shù),不僅可以用cin流對(duì)象來(lái)調(diào)用,而且也可以用istream類的其他流對(duì)象調(diào)用。
相關(guān)文章
Java C++ 算法leetcode828統(tǒng)計(jì)子串中唯一字符乘法原理
這篇文章主要為大家介紹了Java C++ 算法leetcode828統(tǒng)計(jì)子串中唯一字符乘法原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)采集
這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)采集的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下2022-03-03C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù)(推薦)
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)常用字符串庫(kù)函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11斐波那契數(shù)列 優(yōu)化矩陣求法實(shí)例
斐波那契數(shù)列 優(yōu)化矩陣求法實(shí)例,需要的朋友可以參考一下2013-03-03C語(yǔ)言練習(xí)題:求1到10的階乘之和簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇C語(yǔ)言練習(xí)題:求1到10的階乘之和簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05C語(yǔ)言入門(mén)篇--局部全局變量的作用域及生命周期
本篇文章是c語(yǔ)言基礎(chǔ)篇,本文對(duì)初識(shí)c語(yǔ)言的變量、局部全局變量的作用域及生命周期做了簡(jiǎn)要的概述,希望可以幫助大家快速入門(mén)c語(yǔ)言的世界,更好的理解c語(yǔ)言2021-08-08c語(yǔ)言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
這篇文章主要介紹了c語(yǔ)言鏈表基本操作,大家參考使用吧2013-12-12Qt?TCP網(wǎng)絡(luò)通信學(xué)習(xí)
用于數(shù)據(jù)傳輸?shù)牡蛯泳W(wǎng)絡(luò)協(xié)議,多個(gè)物聯(lián)網(wǎng)協(xié)議都是基于TCP協(xié)議的,這篇文章為大家介紹了Qt?TCP網(wǎng)絡(luò)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08