C++ 基本的輸入輸出
C++ 標準庫提供了一組豐富的輸入/輸出功能,我們將在後續的章節進行介紹。本章將討論 C++ 編程中最基本和最常見的 I/O 操作。
C++ 的 I/O 發生在流中,流是位元組序列。如果位元組流是從設備(如鍵盤、磁片驅動器、網路連接等)流向記憶體,這叫做輸入操作。如果位元組流是從記憶體流向設備(如顯示幕、印表機、磁片驅動器、網路連接等),這叫做輸出操作。
I/O 庫頭檔
下列的頭檔在 C++ 編程中很重要。
頭檔 | 函數和描述 |
---|---|
<iostream> | 該檔定義了 cin、cout、cerr 和 clog 對象,分別對應於標準輸入流、標準輸出流、非緩衝標準錯誤流和緩沖標準錯誤流。 |
<iomanip> | 該檔通過所謂的參數化的流操縱器(比如 setw 和 setprecision),來聲明對執行標準化 I/O 有用的服務。 |
<fstream> | 該檔為用戶控制的檔處理聲明服務。我們將在檔和流的相關章節討論它的細節。 |
標準輸出流(cout)
預定義的對象 cout 是 iostream 類的一個實例。cout 對象"連接"到標準輸出設備,通常是顯示幕。cout 是與流插入運算符 << 結合使用的,如下所示:
實例
當上面的代碼被編譯和執行時,它會產生下列結果:
Value of str is : Hello C++
C++ 編譯器根據要輸出變數的數據類型,選擇合適的流插入運算符來顯示值。<< 運算符被重載來輸出內置類型(整型、浮點型、double 型、字串和指針)的資料項目。
流插入運算符 << 在一個語句中可以多次使用,如上面實例中所示,endl 用於在行末添加一個換行符。
標準輸入流(cin)
預定義的對象 cin 是 iostream 類的一個實例。cin 對象附屬到標準輸入設備,通常是鍵盤。cin 是與流提取運算符 >> 結合使用的,如下所示:
實例
當上面的代碼被編譯和執行時,它會提示用戶輸入名稱。當用戶輸入一個值,並按回車鍵,就會看到下列結果:
請輸入您的名稱: cplusplus 您的名稱是: cplusplus
C++ 編譯器根據要輸入值的數據類型,選擇合適的流提取運算符來提取值,並把它存儲在給定的變數中。
流提取運算符 >> 在一個語句中可以多次使用,如果要求輸入多個數據,可以使用如下語句:
cin >> name >> age;
這相當於下麵兩個語句:
cin >> name; cin >> age;
標準錯誤流(cerr)
預定義的對象 cerr 是 iostream 類的一個實例。cerr 對象附屬到標準錯誤設備,通常也是顯示幕,但是 cerr 對象是非緩衝的,且每個流插入到 cerr 都會立即輸出。
cerr 也是與流插入運算符 << 結合使用的,如下所示:
實例
當上面的代碼被編譯和執行時,它會產生下列結果:
Error message : Unable to read....
標準日誌流(clog)
預定義的對象 clog 是 iostream 類的一個實例。clog 對象附屬到標準錯誤設備,通常也是顯示幕,但是 clog 對象是緩衝的。這意味著每個流插入到 clog 都會先存儲在緩衝在,直到緩衝填滿或者緩衝區刷新時才會輸出。
clog 也是與流插入運算符 << 結合使用的,如下所示:
實例
當上面的代碼被編譯和執行時,它會產生下列結果:
Error message : Unable to read....
通過這些小實例,我們無法區分 cout、cerr 和 clog 的差異,但在編寫和執行大型程式時,它們之間的差異就變得非常明顯。所以良好的編程實踐告訴我們,使用 cerr 流來顯示錯誤消息,而其他的日誌消息則使用 clog 流來輸出。