1. 程式人生 > >C++ Primer 筆記——輸入輸出

C++ Primer 筆記——輸入輸出

vs2015 insert image code 不同的 cal 調用 base cdecl

1.C++語言並未定義任何輸入輸出語句,取而代之,包含了一個全面的標準庫來提供IO機制。

技術分享

由上圖能夠知道,I/O操作的基類是ios_base,各個類的用途例如以下:

  • <iostream>
  • istream 從流中讀取數據
  • ostream 向流中寫數據
  • iostream 對流進行讀寫操作。派生於istream和ostream
  • <fstream>
  • ifstream 從文件裏讀取數據。派生於istream
  • ofstream 向文件裏寫數據,派生於ostream
  • fstream 讀寫文件, 派生於iostream
  • <sstream>
  • istringstream 讀取string對象。派生於istream
  • ostringstream 寫string對象。派生於ostream
  • stringstream 讀寫string對象,派生於iostream

2.C與C++處理輸入輸出的方式不同,我們從C語言的輸入輸出可以很明顯看出是函數調用方式,而C++的則是對象模式,iostream類是派生於ostream類和istream類,而cout和cin是ostream類和istream類的對象。

3. std::endl 實質上是一個函數,它做了兩件事情:輸出一個 ‘\n‘ 並刷新緩沖區。

// VS2015編譯器上的定義    
// MANIPULATORS
template<class _Elem,
    class _Traits> inline
    basic_ostream<_Elem, _Traits>&
        __CLRCALL_OR_CDECL endl(basic_ostream
<_Elem, _Traits>& _Ostr) { // insert newline and flush stream _Ostr.put(_Ostr.widen(\n)); _Ostr.flush(); return (_Ostr); }
    // 以下三個語句是等價的
    std::cout << std::endl;
    std::cout << &std::endl;
    std::cout << \n << std::flush;

4.因為系統在空閑的時候會不停的檢查緩沖區,如果發現新內容,將刷新緩沖區,這也是為什麽我們不用std::endl或std::flush時也可以正常輸出的原因。

5.當從鍵盤向程序輸入數據時,對於如何指出文件結束,不同操作系統有不同的約定。在Windows系統中,輸入文件結束符的方法是Ctrl + Z,然後按Enter或Return鍵。在UNIX系統中,包括Mac OS X系統中,文件結束符輸入是用Ctrl+D。

6.我們在輸入的過程中,可以用一些std::cin的函數來判斷輸入的結果是否正確。

    // 以下返回都是bool值
    std::cin.bad();        // 輸入流出現致命性錯誤,不可挽回 
    std::cin.fail();    // 輸入流出現非致命性錯誤,可挽回
    std::cin.eof();        // 輸入流出到達文件結尾
    std::cin.good();    // 輸入流完全正常

C++ Primer 筆記——輸入輸出