輸入輸出流
與輸入輸出流操作相關的類

istream:是用于輸入的流類,cin就是該類的物件,
ostream:是用于輸出的流類,cout就是該類的物件,
ifstream:是用于從檔案讀取資料的類,
ofstream:是用與向檔案寫入資料的類,
iostream:是既能用于輸入,又能用于輸出的類,
fstream:是既能從檔案讀取資料,又能向檔案寫入資料的類,
標準流物件
輸入流物件: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函式可以用于輸入輸出重定向
#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代表輸入流結束,
istream類的成員函式
getline函式
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(...))判斷輸入是否結束,
eof函式
bool eof()
判斷輸入流是否結束
peek函式
int peek()
回傳下一個字符,但不從流中去掉,
putback函式
istream &putback(char c)
將字符ch放回輸入流
ignore函式
istream&ignore(int nCount=1,int delim=EOF);
從流中刪掉最多nCount個字符,遇到EOF時結束,
流操縱算子(格式化輸出)
整數流的基數:流操縱算子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都是函式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91729.html
標籤:C++
上一篇:C++ 01 基礎知識點
下一篇:C++亂數筆記
