C++ Input & Output


1.C++ I/O各類之間的繼承關系圖

參考網址:

  http://www.cplusplus.com/reference/iolibrary/

Note:

  在程序中包含iostream文件將自動創建8個流對象(4個用於窄字符流, 4個用於寬字符流),如下:

cin  --標准輸入流,該流被關聯到標准輸入設備(通常為鍵盤)    ----> wcin

cout  --標准輸入流,該流被關聯到標准輸出設備(通常為顯示器)    ----> wcout

cerr   --標准錯誤流,類似cout,但cerr流沒有緩沖區        ----> wcerr

clog  --標准錯誤流,類似cerr,但clog流擁有緩沖區        ----> wlog

  由上圖可知,cin 是一個istream對象,擁有istream的相關成員函數; cout是一個ostream對象,擁有ostream的相關成員函數和數據成員

2.I/O 常見的成員函數

對於istream類而言,其常見的成員函數如下(以cin對象實例):

  istream::get

    --istream對get方法進行了重載,常見的調用get的形式有4種,如下:

      1) int get();    //讀取下一個字符,返回該字符的ascii碼

      2) istream & get(char & c);  //讀取下一個字符,並將其賦值給字符變量 c

      3) istream & get(char *  s, streamsize n);  //從輸入流中讀取指定大小的字節(參數n),並存儲到s所指向的地址空間中

      4) istream & get(char * s, streamsize n, char delim);  //沖輸入緩沖區中讀取n字節,並存儲到s指向的存儲空間中

    Note:

      1) get的第3種形式和第4種形式,均讀區最多n字節的內容;不同之處在於

      istream & get(char *  s, streamsize n);在讀取n字節或遇到換行符時,停止讀取

      istream & get(char * s, streamsize n, char delim);在讀取n字節或遇到delim指定的分隔符時停止讀取

      形式3相當於如下的形式4樣式:

      get(char *  s, streamsize n) ----> get(char * s, streamsize n, '\n');

      2) get的后兩種形式中,當讀取的字符超過n指定的值時,get不會重置流狀態

 

  istream::getline

    istream & getline(char * s, streamsize n);

    istream & getline(char * s, streamsize n, char delim);

    Note:

      getline 與 get都可以用來讀取一行輸入,不同在於

    1) getline讀取一行時,連同換行符'\n'一起從輸入流中讀取,然后丟棄\n,在讀取的字符最后加上\0空字符,以表示字符串結尾

     get不會讀取\n換行符,\n依然保留在輸入流中,以備后續的讀取

    2) getline讀取超過n個字節時,重置流狀態,設置failbit等流標志位;get函數則不會進行該操作

    

  istream::ignore

    istream & ignore(streamsize n, char delim = EOF);      //提取並丟棄字符

  istream::gcout

    streamsize gcount() const;        //獲取最后一次非格式化讀取的字節數

  istream::peek

    int peek();          //查看輸入流中下一個字符,返回該字符的ascii碼

  Note: peek僅僅查看,並不從輸入流中讀取字符

  istream::putback

    istream  & putback(char c);      //將字符c放回輸入流中(插入到輸入流中,以備下一次讀取)

  istream::read

    istream & read(char * s, streamsize n);    //從輸入流中讀取n字節,並存儲到s指定的存儲空間中

  其他:tellg , seekg            //用於輸入流定位的函數

 

對於ostream類而言,其常見的成員函數如下(以cout對象實例):

  ostream::put

    ostream & put(char c);      //將字符c插入到輸出流中,即打印字符c

  ostream::write

    ostream & write(const char * s, streamsize n);    //將s從的前n個字節插入到輸入流中

  其他:

    tellp, seekp            //用於輸出流定位的函數

    flush                 //刷新輸出流

 

3.文件操作

  ifstream::open

    void open(const char * filename, ios_base::openmode mode = ios_base::in);  //打開filename文件,並將它與ifstream對象關聯

    void open(const string & filename, ios_base::openmode mode = ios_base::in);

  ifstream::is_open

    bool is_open() const;    //檢測文件是否與ifstream對象關聯

  ifstream::close

    void close();        //關閉ifstream對象與文件的鏈接

  ofstream::open

    void open(const char * filename, ios_base::openmode mode = ios_base::out);

    void open(const string & filename, ios_base:openmode mode = ios_base::out);

  其他:ofstream::is_open, ofstream::close與ifstream相同

  Note:

    1) ios_base::openmode指定了打開文件的模式,常見的模式有:

    ios_base::app      //append

    ios_base::ate      //at end

    ios_base::in       //input

    ios_base::out      //output

    ios_base::trunc     //truncate

    ios_base::binary     //binary

    2)可將多個openmode通過 | (與運算)進行組合,如:

      ios_base::out|ios_base::trunc

  

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM