終端機輸入輸出


學習 C++ 通常是由終端機,也就是文字模式下開始,為了與程式互動,在終端機下輸出程式執行結果,或是從終端機取得使用者的輸入資料是基本需求,在 C++ 中輸入輸出是由標準程式庫的 iostream 提供,這也就是為何要在程式的一開頭加上:

#include <iostream>

標準輸出(Stand output)通常是指終端機,C++ 藉由 iostreamostream 物件 cout(發音 see-out)將訊息輸出至終端機,<< 運算子的左運算必須是個 ostream,右邊是運算值,例如顯示 "Hello! World!" 訊息時,可以這麼撰寫:

cout << "Hello! World!";

<< 運算子傳回左運算元作為結果,因此可以串鏈地如下撰寫:

cout << "Hello! World!" << endl;

這相當於:

(cout << "Hello! World!") << endl;

endl 有輸出換行並出清緩衝區的效果。在執行程式時,可以使用 >> 將輸出導向至指定檔案,例如(假設編譯後的可執行檔為 main):

main >> result.txt

如果程式目的是顯示 "Hello! World!",以上執行後會將結果導向至 result.txt,而不會在螢幕上顯示 "Hello! World!",result.txt 中會有輸出結果 Hello! World!。

ostream 物件 cerr(發音 see-err),稱為標準錯誤(Standard error),會將訊息輸出至終端機,與標準輸出不同的是,cerr 不會被重新導向,例如:

#include <iostream> 
using namespace std; 

int main() { 

    cout << "Hello! World!" << endl;
    cerr << "Sorry! World!" << endl;

    return 0;
}

在編譯程式之後,如下執行程式,會發現輸出結果如下:

main >> result.txt
Sorry! World!

開啟 result.txt 後,會發現當中只有 Hello! World! 訊息,而 Sorry! World! 訊息並沒有被導向至檔案,而是直接顯示在終端機。

ostream 物件 clog(發音 see-log)也是寫到標準錯誤,用於輸出日誌訊息,cerr 不經緩衝區,亦有人稱無緩衝標準錯誤,而 clog 會經過緩衝區,亦有人稱緩衝標準錯誤。

要重新導向標準輸出是用 >,標準輸入則是 <,而 >> 除了重導標準輸出外,還有附加的功能,也就是會把輸出附加到被導向的目標檔案後頭,如果目標檔案本來不存在,那麼效果就和 > 一樣。

若打算取得使用者的輸入,可以使用標準輸入(Standard input),這可以透過 iostreamistream 物件 cin(發音 see-in)與 >> 運算子,>> 左運算元是個 istream,右邊是個變數,並傳回左運算元作為結果。例如:

#include <iostream> 
using namespace std; 

int main() { 
    int number = int();
    cout << "請輸入數字: "; 
    cin >> number;
    cout << "輸入的數字: " << number << endl;

    return 0;
}

執行結果:

請輸入數字: 10
輸入的數字: 10