istream:是用於輸入的流類,cin就是該類的對象。
ostream:是用於輸出的流類,cout就是該類的對象。
ifstream:是用於從文件讀取數據的類。
ofstream:是用與向文件寫入數據的類。
iostream:是既能用於輸入,又能用於輸出的類。
fstream:是既能從文件讀取數據,又能向文件寫入數據的類。ios
輸入流對象:cin 與標準輸入設備相連
輸出流對象:cout 與標準輸出設備相連
cerr 與標準錯誤輸出設備相連
clog 與標準錯誤輸出設備相連
缺省狀況下
cerr<<"hello,world"<<endl
和clog<<"hello,world"<<endl
和cout<<"hello,world"<<endl
同樣
cin對應於標準輸入流,用於從鍵盤讀取數據,也能夠被重定向爲從文件中讀取數據。
cout對應於標準輸出流,用於向屏幕輸出數據,也能夠被重定向爲向文件寫入數據。
cerr對應於標準錯誤輸出流,用於向屏幕輸出出錯信息。
clog對應於標準錯誤輸出流,用於向屏幕輸出出錯信息。
cerr和clog的區別在於cerr不適用緩衝區,直接向顯示器輸出信息;而輸出到clog中的信息先會被存放在緩衝區,緩衝區滿或者刷新時才輸出到屏幕。函數
freopen函數能夠用於輸入輸出重定向this
#include<iostream> using namespace std; int main(){ int x,y; cin>>x>>y; freopen("test.txt","w",stdout);//將標準輸出重定向到test.txt文件 if(y==0) cerr<<"error"<<endl; else cout<<x/y; return 0; }
#include<iostream> using namespace std; int main(){ double f; int n; freopen("test.txt","r",stdout);//cin被改成從t.txt中讀取數據 cin>>f>>n; return 0; }
能夠用以下方法判斷輸入流結束:
while(cin>>x){}
若是是從文件輸入,讀到文件尾部,輸入流就算結束。
若是從鍵盤輸入,則在單獨一行輸入Ctrl+Z表明輸入流結束。spa
istream&getline(char *buf,int bufSize);
從輸入流中讀取bufSize-1個字符到緩衝區buf,或讀到碰到'\n'爲止(哪一個先到算哪一個)。
istream&getline(char *buf,int bufSize,char delim)
從輸入流中讀取bufSize-1個字符到緩衝區buf,或讀到碰到delim字符爲止(哪一個先到算哪一個)。
兩個函數都會自動在buf中讀入數據的結尾添加'\0'。'\n'或delim都不會被讀入buf,但會被從輸入流中取走。若是輸入流中'\n'或delim以前的字符個數達到或超過了buf'Size個,就致使讀入出錯,其結果就是:雖然本次讀入已經完成,可是以後的讀入就都會失敗了。
能夠用if(!cin.getline(...))判斷輸入是否結束。code
bool eof()
判斷輸入流是否結束對象
int peek()
返回下一個字符,但不從流中去掉。blog
istream &putback(char c)
將字符ch放回輸入流ip
istream&ignore(int nCount=1,int delim=EOF);
從流中刪掉最多nCount個字符,遇到EOF時結束。ci
整數流的基數:流操縱算子dec,oct,hex,setbase
浮點數的精度(precision,setprecision)
設置域寬(setw,width)
用戶自定義的流操縱算子
使用流操縱算子
注意:使用流操縱算子須要#include<iomanip>字符串
流操縱算子dec,oct,hex
int n=10; cout<<n<<endl; cout<<hex<<n<<"\n"//十六進制輸出 <<dec<<n<<"\n"//十進制輸出 <<oct<<n<<endl;//八進制輸出
輸出結果:
10
a
10
12
precision,setprecision
precision是成員函數,調用方式爲:cout.precision(5)
setprecision是流操縱算子,其調用方式爲: cout<<setprecision(5);
//能夠連續輸出
它們的功能相同。
指定輸出浮點數的有效位數(非定點方式輸出時)
指定輸出浮點數的小數點後的有效位數(定點方式輸出時)
定點方式:小數點必須出如今個位數後面(非定點方式通常指科學計數法)
設置定點輸出的方式cout<<setiosflags(ios::fixed)<<setprecision(6)<<x<<endl;
setiosflags(ios::fixed)表示以小數點位置固定的方式輸出,或者使用fixed算子。
resetiosflags(ios::fixed)表示取消以小數點位置固定的方式輸出。
設置域寬(setw,width)
setw爲算子,width是成員函數
int w=4; char string[10]; cin.width(w); cin>>string; cout<<setw(5)<<endl;
輸入:1234
輸出: 123
注意:cin在讀入字符串的時候會預留一個地方給'\0',因此實際只讀了三個字符。
寬度設置有效性是一次性的,在每次讀入和輸出以前都要設置寬度。
showpos非負數要顯示正號。
noshowpos非負數不顯示正號。
fixed表示以定點方式輸出。
scientific表示以科學計數法輸出。
setfill(ch)表示寬度不足時以ch字符填充空白。
left表示若是寬度不夠左對齊。
right表示右對齊。
internal表示寬度不足時,符號和數值分列左右,中間填充字符填充
ostream&tab(ostream &output){ return output<<'\t'; } cout<<"aa"<<tab<<"bb"<<endl;
輸出:aa bb
之因此容許用戶這樣自定義流操縱算子,是由於iostream裏對<<進行了重載(成員函數)
ostream &operator <<(ostream &(*p)(ostream &));
該函數內部會調用p所指向的函數,且以*this做爲參數hex、dec、oct都是函數。