C++ 基本的輸入輸出


C++ 標準函式庫提供了一組豐富的輸入/輸出功能,我們將在後續的章節中介紹。本章將討論 C++ 程式設計中最基本、最常見的 I/O 操作。

C++ 的 I/O 發生在流中,流是位元組序列。如果位元組流是從裝置(如鍵盤、磁碟機、網路連接等)流向內存,這稱為輸入操作。如果位元組流是從記憶體流向裝置(如顯示器、印表機、磁碟機、網路連線等),這稱為輸出操作

I/O 函式庫頭檔

下列的頭檔在 C++ 程式設計中很重要。

頭檔函數與描述
#<iostream>該文件定義了cin、cout、cerrclog 對象,分別對應於標準輸入流、標準輸出流、非緩衝標準錯誤流和緩衝標準錯誤流。
<iomanip>該檔案透過所謂的參數化的流操縱器(例如setwsetprecision ),來聲明對執行標準化I/O 有用的服務。
<fstream>該檔案為使用者控制的檔案處理聲明服務。我們將在文件和流的相關章節中討論它的細節。

標準輸出流(cout)

預先定義的物件 coutostream 類別的一個實例。 cout 物件"連接"到標準輸出設備,通常是顯示器。 cout 是與流插入運算子<< 結合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Hello C++";
 
   cout << "Value of str is : " << str << endl;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Value of str is : Hello C++

C++ 編譯器根據要輸出變數的資料類型,選擇適當的流插入運算子來顯示值。 << 運算子被重載來輸出內建類型(整數、浮點型、double 型、字串和指標)的資料項。

流插入運算子 << 在一個語句中可以多次使用,如上面實例中所示,endl 用於在行末尾添加一個換行符。

標準輸入流(cin)

預先定義的物件 cinistream 類別的一個實例。 cin 物件附屬到標準輸入設備,通常是鍵盤。 cin 是與流提取運算子 >> 結合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char name[50];
 
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;
 
}

當上面的程式碼被編譯和執行時,它會提示使用者輸入名稱。當使用者輸入一個值,並按下回車鍵,就會看到下列結果:

请输入您的名称: cplusplus
您的名称是: cplusplus

C++ 編譯器根據要輸入值的資料類型,選擇合適的流提取運算子來提取值,並把它存儲在給定的變數中。

流提取運算子>> 在一個語句中可以多次使用,如果要求輸入多個數據,可以使用如下語句:

cin >> name >> age;

這相當於下面兩個語句:

cin >> name;
cin >> age;

標準錯誤流(cerr)

預先定義的物件cerrostream 類別的一個實例。 cerr 物件附屬到標準錯誤設備,通常也是顯示屏,但是 cerr 物件是非緩衝的,並且每個流插入到 cerr 都會立即輸出。

cerr 也是與流插入運算子<< 結合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Error message : Unable to read....

標準日誌流(clog)

預先定義的物件clogostream 類別的一個實例。 clog 物件附屬到標準錯誤設備,通常也是顯示屏,但是 clog 物件是緩衝的。這表示每個流插入到 clog 都會先儲存在緩衝在,直到緩衝填滿或緩衝區刷新時才會輸出。

clog 也是與流插入運算子<< 結合使用的,如下所示:

#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Error message : Unable to read....

透過這些小實例,我們無法區分 cout、cerr 和 clog 的差異,但在編寫和執行大型程式時,它們之間的差異就變得非常明顯。所以良好的程式設計實踐告訴我們,使用 cerr 流來顯示錯誤訊息,而其他的日誌訊息則使用 clog 流來輸出。


#