1. C++輸入輸入輸出包括:
- 标準I/O:對系統指定的标準裝置的輸入和輸出。比如鍵盤輸入資料,輸出到顯示螢幕
- 檔案I/O:以外存磁盤檔案為對象進行輸入和輸出。例如從磁盤檔案輸入資料,資料輸出到磁盤檔案。
- 字元串I/O:對記憶體中指定的空間進行輸入和輸出。
2. I/O類庫中的常用流類
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLzIGZ2MWM1QmMxAjNhJGOiJzN0QjYxQWY4MmZ0YTN4YTL0ADOwgTMxIzLcRDMzEDMy8CXxYzM2cDNvw1ZvxmYvwVbvNmLn9GbiRXauNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.jpg)
3. iostream類庫的即可分别由不同的頭檔案來實作:
- iostream:包含了對輸入輸出流進行操作所需的基本資訊
- fstream:用于使用者管理的檔案的I/O操作
- strstream:用于字元串流I/O
- stdiostream:用于混合使用C和C++的I/O機制時,例如想将C程式轉變為C++程式
- iomanip:在使用格式化I/O時應包含此檔案
4. 标準輸出流
- cout 流對象:cout是console output的縮寫,意為在控制台(終端顯示器)的輸出。可以傳送到顯示器輸出,也可以重定向到磁盤檔案
- cerr 流對象:标準錯誤流,隻能在顯示器輸出,不經過緩沖區
- clog 流對象:在終端顯示器顯示錯誤資訊。clog中的資訊存放在緩沖區,緩沖區滿後或者遇endl時向顯示器輸出。
5 格式輸出 (iomanip)
5.1 使用控制符控制輸入格式 (使用 cout << dec << )
控制符 | 作用 |
dec | 設定整數的基數為10 |
hex | 設定整數的基數為16 |
oct | 設定 整數的基數為8 |
setbase(n) | 設定整數的基數為n(n隻能是16,10,8之一) |
setfill(c) | 設定填充字元c,c可以是字元常量或字元變量 |
setprecision(n) | 設定實數的精度為n位。在以一般十進制小數形式輸出時,n代表有效數字。在以fixed(固定小數位 數)形式和scientific(指數)形式輸出時,n為小數位數。預設為6. |
setw(n) | 設定字段寬度為n位。 |
setiosflags(ios::fixed) | 設定浮點數以固定的小數位數顯示。 |
setiosflags(ios::scientific) | 設定浮點數以科學計數法(即指數形式)顯示。 |
setiosflags(ios::left) | 輸出資料左對齊。 |
setiosflags(ios::right) | 輸出資料右對齊。 |
setiosflags(ios::shipws) | 忽略前導的空格。 |
setiosflags(ios::uppercase) | 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。 |
setiosflags(ios::showpos) | 輸出正數時,給出“+”号。 |
resetiosflags() | 終止已設定的輸出格式狀态,在括号中應指定内容。 |
- 備注1:dec,hex,oct隻能選一個,預設是dec。(設定隻對目前有效)
- 使用控制符setiosflags()設定輸出格式後,如果想設定為同組的另一種狀态,需要先調用resetiosflags()終止原來的設定之後再重新設定。
5.2 用于控制輸出格式的流成員函數 (使用cout.function)
流成員函數 | 與之作用相同的控制符 | 作用 |
precision(n) | setprecision(n) | 設定實 數的精度為n位。 |
width(n) | setw(n) | 設定字段寬度為n位。 |
fill(c) | setfill(c) | 設定填充字元c。 |
setf( ) | setiosflags( ) | 設定輸出格式狀态,括号中應給出格式狀态,内容與控制符setiosflags括号中内容相同。 |
unsetf( ) (與setf搭配使用) | resetiosflags( ) | 終止已設定的輸出格式狀态。 |
5.3. 設定格式狀态的格式标志
格式标志 | 作用 |
ios::left | 輸出資料在本域寬範 圍内左對齊 |
ios::right | 輸出資料在本域寬範圍内右對齊 |
ios::internal | 數值的符号位在域寬内左對齊,數值右對齊,中間由填充字元填充 |
ios::dec | 設定整數的基數為10 |
ios::oct | 設定整數的基數為8 |
ios::hex | 設定整數的基數為16 |
ios::showbase | 強制輸出整數的基數(八進制以0打頭,十六進制以0x打頭) |
ios::showpoint | 強制輸出浮點數的小點和尾數0 |
ios::uppercase | 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示 |
ios::showpos | 輸出正數時,給出“+”号。 |
ios::scientific | 設定浮點數以科學計數法(即指數形式)顯示 |
ios::fixed | 設定浮點數以固定的小數位數顯示 |
ios::unitbuf | 每次輸出後重新整理所有流 |
ios::stdio | 每次輸出後清除 stdout,stderr |
- 備注1:需要設定輸出指定的寬度,必須每次設定width()或者setw()
- 使用setf()設定了某種狀态,如果需要改變,需要先使用unsetf終止原來的設定,然後再重新設定。
6. 輸出流成員函數put:輸出單個字元。例如cout.put(65); // 輸出'A',功能同putchar(65)一樣。
7. 标準輸入流
- cin流:
- Ctrl+Z表示檔案結束符。
- if (!cin) cout << "error"; 或者while (cin>>num) //判斷流對象是否處于正常狀态和提取操作是否成功。
- "cin>>"從輸入流提取資料,遇到空格或者回車就終止。
- 用于字元串輸入的流成員函數get:
- char ch;
- 不帶參數的get函數:ch = cin.get(); (cin.get() == EOF檔案結束符)
- 帶一個參數的get函數:cin.get(ch);
- 有3個參數的get函數:cin.get(字元串數組/字元串指針,字元個數n,終止字元)
- 終止字元預設為'\n'
- 讀取n-1個字元,最後一位為'\0'
- 如果在讀取n-1個字元之前遇到終止符,則提前結束讀取。cin.get停在終止符的原位置。
- 用成員函數getline函數讀取一行字元:cin.getline(字元串數組/字元串指針,字元個數n,終止标志字元)
- 終止字元預設為'\n'。
- (終止字元未被讀入,下一個getline從終止标志的下一個字元開始接着讀入)
8. istream類的其他函數
- eof:
- 調用形式cin.eof()。
- 數值為非零表示真,反之為0标示假(^Z)。
- peek:
- 調用形式ch=cin.peek()。
- 觀察下一個字元,指針停留在目前位置。
- putback:
- 調用形式cin.putback(ch)。
- 将前面用get或者getline函數從輸入流讀入的字元ch傳回到輸入流,插入目前指針位置。
- ignore:
- 調用方式cin.ignore(n, 終止字元),
- 預設cin.ignore(),n為1,終止符預設為EOF。跳過輸入流中的n個字元,或者遇到指定終止字元時提前結束。
參考文章: 輸入輸出流(一)