MOOC C++筆記(七)輸入輸出流

  • 2019 年 10 月 30 日
  • 筆記

輸入輸出流

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


istream:是用於輸入的流類,cin就是該類的對象。
ostream:是用於輸出的流類,cout就是該類的對象。
ifstream:是用於從文件讀取數據的類。
ofstream:是用與向文件寫入數據的類。
iostream:是既能用於輸入,又能用於輸出的類。
fstream:是既能從文件讀取數據,又能向文件寫入數據的類。

標準流對象

輸入流對象:cin 與標準輸入設備相連
輸出流對象:cout 與標準輸出設備相連
cerr 與標準錯誤輸出設備相連
clog 與標準錯誤輸出設備相連
缺省情況下
cerr<<"hello,world"<<endlclog<<"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中讀入數據的結尾添加’