MOOC C++筆記(七)輸入輸出流
- 2019 年 10 月 30 日
- 筆記
輸入輸出流
與輸入輸出流操作相關的類
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中讀入數據的結尾添加’