C++Primer Plus --- 輸入,輸出和文件

1. C++ 程序一般在用戶按下回車鍵時刷新輸入緩衝區。 ios

    C++ I/O定義了一些類模板,以支持char 和 what_t 數據。使用typedef工具,C++使得這些模板char具體化到能模仿傳統的非模板I/O實現。下面是相關類: c++

  • streambuf 類爲緩衝區提供了內存,並提供了用於填充緩衝區,訪問緩衝區內容,刷新緩衝區和管理緩衝區內存的類方法; 
  • ios_base 類表示流的通常特徵,如是否可讀取,是二進制流仍是文本流等;
  • ostream,istream都是從ios類派生來的,提供了輸出和輸入方法;
  • iostream類是基於istream和ostream類的,所以繼承了輸入和輸出方法。

要使用這些工具,必須使用適當的類對象。例如cin cout。 數據庫

2. 重載的<<操做符 函數

   << 默認含義是按位左移操做符,可是ostream類從新定義了<<操做符,方法是將其重載爲輸出。 工具

在這種狀況下,<<叫作插入操做符,而不是左移操做符。插入操做符被重載,使之可以識別C++中多有基本類型。ostream都提供了operator<<() 函數的定義。 編碼

    例如: ostream & perator<<(int) 表示函數接受一個int參數。 spa

3. write()顯示整個字符串,模板原型爲: 對象

   basic_ostream<charT, traits>& write(const char_type* s, streamsize n); 繼承

   cout.wirite() 調用cout對象,由於write方法返回一個指向調用它的對象的引用,這裏調用它的對象是cout. 索引

write方法並不會在遇到空字符時自動中止打印字符,而只是打印指定數目的字符,即便超過了字符串的邊界!

    writ()方法也能夠用於數值數據,能夠將地址強制轉換爲char*,而後傳遞給它。

    long val = 4545121212;

    cout.write((char*) &val, sizeof(long)); 

4. 刷新緩衝區

   緩衝區被填滿,程序將flush刷新緩衝區,把內容發出去,並清空緩衝區,以存儲新的數據。  

   一般緩衝區爲512字節或其整數倍。

   可是,在屏幕輸出時,不用等到緩衝區填滿,例如將換行符發送到緩衝區,將刷新緩衝區;另外輸入即將發生緩衝區刷新。

   實際上,控制符也是函數。 例,能夠直接調用flush()來刷新cout緩衝區; flush(cout);

5. c++ 將十六進制和八進制都視爲無符號的。

6. 使用cin進行輸入

   cin對象將標準輸入表示爲字節流。輸入流的方法,跳過空白(space, enter, tab),直到遇到非空白字符。即便對於單字符模式,>>操做符將讀取一個指定類型的數據。也就是說,它讀取從非空白字符開始,到與目標類型不匹配的第一個字符之間的所有內容。

7. 流狀態

   設置狀態

   clear() 在輸入不匹配或到達文件尾時,須要使用不帶參數的clear()從新打開輸入。

   setstate() 爲了輸入和輸出函數提供一種修改狀態的途徑。例如:setstate(eofbit)

8. get(char&) 和 get(void) 提供不跳過空白的單字符輸入功能。

   cin.get(ch)指向istream對象的引用,到達文件末尾時函數返回值,轉換爲false

   cin.get(void)字符編碼 int, 到達文件末尾時函數的返回值是EOF

9. 字符串輸入:getline() get()  ignore()

   get()將換行符留在輸入流中,這樣接下來的輸入操做首先將看到換行符;

   getline()抽取並丟棄輸入流中的換行符。

10. 文件輸入和輸出

  字處理程序建立文件;數據庫程序建立和搜索信息文件;編譯器讀取源代碼文件並生成可執行文件。文件自己是存儲在某種設備上的一系列字節。

11. 隨機存取

   隨機存取指的是直接移動(不是依次移動)到文件的任何位置。隨機存取一般被用於數據庫文件,程序維護一個獨立的索引文件,該文件指出數據在主數據文件中的位置。

12. cin.get(char)成員函數調用經過返回轉換爲false的bool值來指出已達到EOF, 而cin.get()成員函數調用則經過返回EOF值來指出已達到EOF,EOF在文件iostream中定義的。

相關文章
相關標籤/搜索