C++中與輸入相關(guān)的istream類成員函數(shù)簡介
eof 函數(shù)
eof是end of file的縮寫,表示“文件結(jié)束”。從輸入流讀取數(shù)據(jù),如果到達(dá)文件末尾(遇文件結(jié)束符),eof函數(shù)值為非零值(真),否則為0(假)。
[例] 逐個讀入一行字符,將其中的非空格字符輸出。
#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ù)的作用是觀測下一個字符。其調(diào)用形式為:
c=cin.peek( );
函數(shù)的返回值是指針指向的當(dāng)前字符,但它只是觀測,指針仍停留在當(dāng)前位置,并不后移。如果要訪問的字符是文件結(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(下一個字符是空格) The second part is:I am a student
ignore函數(shù)
其調(diào)用形式為
cin.ignore(n, 終止字符)
函數(shù)作用是跳過輸入流中n個字符,或在遇到指定的終止字符時提前結(jié)束(此時跳過包括終止字符在內(nèi)的若干字符)。如
ighore(5, 'A') //跳過輸入流中個字符,遇'A'后就不再跳了
也可以不帶參數(shù)或只帶一個參數(shù)。如
ignore( ) // n默認(rèn)值為,終止字符默認(rèn)為EOF
相當(dāng)于
ignore(1, EOF)
[例] 用ignore函數(shù)跳過輸入流中的字符。先看不用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中沒有從輸入流中讀取有效字符)
如果希望第二個cin.get函數(shù)能讀取"I study C++.",就應(yīng)該設(shè)法跳過輸入流中第一個'/',可以用ignore函數(shù)來實(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( );//跳過輸入流中一個字符
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++.
以上介紹的各個成員函數(shù),不僅可以用cin流對象來調(diào)用,而且也可以用istream類的其他流對象調(diào)用。
相關(guān)文章
Qt使用QCustomPlot的實(shí)現(xiàn)示例
QCustomPlot是一個基于Qt C++的圖形庫,用于繪制和數(shù)據(jù)可視化,并為實(shí)時可視化應(yīng)用程序提供高性能服務(wù),本文主要介紹了Qt使用QCustomPlot的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-01-01
C++實(shí)現(xiàn)一個線程安全的單例工廠實(shí)現(xiàn)代碼
這篇文章主要介紹了 C++實(shí)現(xiàn)一個線程安全的單例工廠實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
C++實(shí)現(xiàn)LeetCode(148.鏈表排序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(148.鏈表排序),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

