C++ I/O 進階

      網友投稿 646 2025-04-04

      C++ I/O 進階

      概述

      I/O 類庫

      I/O 中的重載

      流對象

      標準輸入流

      cin 流對象

      案例

      get 函數

      getline 函數

      eof 函數

      cout 流對象

      cerr 流對象

      clog 流對象

      概述

      C++ 的輸入 (input stream) 和輸出 (output stream)是由若干字節組成的字節序列, 使得數據按順序從一個對象傳送到另一對象. 流 (stream) 表示量信息從源到目的端的流動.

      C++ 的輸入輸出包括:

      標準 I/O: 對系統指定的標準設備的輸入

      文件 I/O: 對磁盤文件的輸入和輸出

      串 I/O: 對內存中指定的空間進行的輸入和輸出

      I/O 類庫

      I/O stream 類庫:

      頭文件是程序與類庫的接口, iostream 類庫的接口分別由不同的文件來實現.

      常用的頭文件:

      iostream: 包含對 I/O 進行操作的基本信息

      fstream: 用于用戶管理的文件的 I/O 操作

      strstream: 用于字符串流的 I/O 操作

      stdiostream: 用于混合使用 C 和 C++ 的 I/O 機制

      iomanip: 使用格式化 I/O 時的操作

      I/O 中的重載

      在之前的文章中我們使用<<和>>來實現控制臺的輸出和輸入.

      <<和>>被重載來用于標準類型數據的輸出和輸入:

      <<和>>本來是 C++ 中的左位移運算符和右位移運算符

      在 iostream 頭文件中<<和>>被重載了

      在使用<<和>>的時候, 我們必須#include

      在 input stream 和 output stream 類中對位移運算符<<和>>進行重載的成員函數, 包括:

      ostream operator << (int );

      ostream operator << (float );

      ostream operator << (char );

      ostream operator << (char *);

      注: 想將<<和>>用于自己聲明的類型數據必須對<<和>>進行重載.

      流對象

      I/O stream 頭文件還定義了 4 種流對象:

      cin: 從標準輸入設備輸入到內存的數據流對象, 稱- 為 cin 流或標準輸入流

      cout: 從內存輸出到控制臺的數據流對象, 稱為 cout 流或標準輸出流

      cerr 和 clog: 向控制臺輸出錯誤信息

      例如:

      當我們從鍵盤輸入 “World”, cin 會把字符串存入內存, 當我們調用 cout, 內存中的 “World” 就被輸出到控制臺上.

      標準輸入流

      標準輸出流, 是流向標準輸出設備的數據. ostream 類定義了 3 個輸出流對象: cout, cerr, clog.

      cin 流對象

      cin 是 istream 類的對象, 從標準輸入設備獲取數據. 程序中的變量通過流提取符>>從 cin 流中提取數據:

      流提取符>>從流中提取數據時, 通常跳過流中的空格, tab 鍵, 換行符等空白字符

      只有在輸入完數據再按回車鍵后, 該行數據才被送入鍵盤緩沖區, 形成輸入流. 提取運算符>>才能從中提取數據

      程序將從鍵盤緩沖區中連續的獲得數據

      當遇到無效字符或文件結束符^Z時, cin 無法正常提取數據, 處于出錯狀態, 返回 0 值 (false)

      案例

      輸入個數不確定的成績:

      #include #include using namespace std; int main() { // 定義變量 double grade; cout << "enter your grade:\n"; while (cin >> grade){ if(grade >= 85){ cout << grade << " Good!" << endl; } if(grade < 60){ cout << grade << " fail" << endl; } cout << "enter your grade:\n"; } cout << "The end." << endl; return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      輸出結果:

      enter your grade: 90 90 Good! enter your grade: 12 12 fail enter your grade: ^Z The end.

      1

      2

      3

      4

      5

      6

      7

      8

      9

      get 函數

      不帶參數的 get 函數:

      cin.get()

      1

      從輸入流中提取一個字符, 返回讀入的字符

      遇到輸入流中的文件結束符, 則返回 EOF (End Of File)

      C++ I/O 進階

      有一個參數的 get 函數:

      cin.get(c)

      1

      從輸入流中讀取一個字符, 賦值給字符變量 c

      讀取成功返回真, 失敗或遇到文件結束符返回 0 (false)

      有 3 個參數的 get 函數:

      cin.get(字符數組或指針, n, 終止字符)

      1

      從輸入流中讀取 n-1 個字符, 賦值給指定的字符數組

      若在讀取 n-1 個字符之前遇到指定的終止字符, 則提前結束讀取

      讀取成功函數返回真, 失敗返回 0 (false)

      getline 函數

      getline 函數的作用是從輸入流中讀取一行字符. 例如:

      istream &getline(char *buffer, streamsize num ); istream &getline(char *buffer, streamsize num, char delim );

      1

      2

      getline 函數用于輸入流, 讀取字符到 buffer 中, 直到:

      num-1 個字符已經讀入

      碰到一個換行標志

      碰到一個 EOF

      讀到字符 delim

      注: getline 函數遇到空白字符不結束.

      eof 函數

      eof (End Of File) 表示文件結束. 從輸入流讀取數據如果達到文件末尾或遇到文件結束符時, eof 函數的值為非零值 (true), 否則為 0 (false)

      cout 流對象

      cout 是 console input 的縮寫, 意為在控制臺的輸出:

      cout 不是 C++ 預定義的關鍵字, 它是 ostream 流類的對象, 在 iostream 中定義

      “cout <<” 輸出基本類型的數據時, 可以不必考慮數據是什么類型,系統會判斷數據的類型, 并根據其類型選擇調用與之匹配的運算符重載函數

      cout 流在內存中對應開辟了一個緩沖區, 用來存放流中的數據, 當向 cout 流插入一個 endl 時, 立即輸出流中所有數據, 然后插入一個換行符, 并刷新流 (清空緩沖區)

      cout.flush(); 輸出流中所有數據, 刷新緩沖區

      cerr 流對象

      cerr 流對象是標準錯誤流, 被指定為與顯示器關聯. cerr 的作用是想標準組錯誤設備 (standard error device) 輸出有關出錯信息.

      cerr 和 cout 的區別:

      cout 流通常是傳送到顯示器輸出, 但也可以被重新定向輸出到磁盤文件

      cerr 流中的信息只能在顯示器輸出

      cerr 的用途:

      當調試程序時, 往往不希望程序運行時的出錯信息被送到其他文件, 而要求在顯示器上及時輸出, 這是應該用 cerr

      cerr 流中的信息是用戶根據需要指定的

      案例 (解一元二次方程):

      #include #include using namespace std; int main() { double a, b, c, delta; cout << "please input a, b, c:\n"; cin >> a >> b >> c; if (a==0){ cerr << "a is equal to zero, error!" << endl; }else if((delta = b*b - 4*a*c) < 0){ cerr << "delta < 0, error" << endl; }else{ cout << "x1=" << (-b + sqrt(delta)) / (2*a) << endl; cout << "x1=" << (-b - sqrt(delta)) / (2*a) << endl; } return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      輸出結果:

      clog 流對象

      colg 流對象也是標準錯誤流, 它是 console log 的縮寫. clog 的作用和 cerr 相同, 都是在終端顯示器上顯示出錯誤信息.

      clog 和 cerr 的區別:

      cerr 是不經過緩沖區, 直接向顯示器上輸出有關信息

      clog 中的信息存放在緩沖區, 緩沖區滿后或遇到 endl 時向顯示器輸出

      C++ 單片機

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格如何設置頁眉
      下一篇:怎么在excel里查找文字(excel 查找文字)
      相關文章
      亚洲精品国产字幕久久不卡| 亚洲AV成人精品日韩一区18p| yy6080亚洲一级理论| 亚洲人成色99999在线观看| 亚洲中字慕日产2021| 亚洲欧洲精品视频在线观看| 77777_亚洲午夜久久多人| 亚洲男人天堂av| 久久亚洲AV成人无码国产 | 亚洲人成电影在线天堂| 亚洲一区影音先锋色资源| 久久亚洲私人国产精品| 久久精品亚洲中文字幕无码麻豆| 亚洲国产精品不卡在线电影| 亚洲伦另类中文字幕| 4480yy私人影院亚洲| 亚洲理论片在线观看| 亚洲国产一区在线观看| 2020久久精品亚洲热综合一本| 亚洲日本乱码卡2卡3卡新区| 亚洲欧洲精品成人久久曰| 亚洲精华液一二三产区| 国产AV无码专区亚洲AV琪琪| 亚洲国产综合人成综合网站| 亚洲一区无码精品色| 亚洲日韩中文无码久久| 久久亚洲成a人片| 亚洲综合图片小说区热久久| 亚洲中文无码线在线观看| 在线观看日本亚洲一区| 亚洲AV无码成人网站在线观看| 激情婷婷成人亚洲综合| 亚洲区不卡顿区在线观看| 亚洲乱码一区二区三区在线观看| 亚洲AV人人澡人人爽人人夜夜| 亚洲春色另类小说| 亚洲国产精品综合久久20| 亚洲AV日韩AV一区二区三曲| 亚洲精品国产va在线观看蜜芽| 亚洲欧洲精品无码AV| 亚洲视频免费在线看|