基本輸入輸出

2018-08-12 22:03 更新

基本輸入輸出

C++ 標(biāo)準(zhǔn)庫提供了一組廣泛的的輸入/輸出功能,我們將在隨后的章節(jié)中展開。本章將討論 C++ 編程所需的最基本和最常見的 I/O 操作。

C++ I/O發(fā)生在流中,流是一種字節(jié)序列。如果字節(jié)流從一個設(shè)備(如鍵盤、磁盤驅(qū)動器,或網(wǎng)絡(luò)連接等)到主內(nèi)存,這稱為輸入操作(input operation)。如果字節(jié)從主內(nèi)存流向一個設(shè)備(如顯示屏,打印機,磁盤驅(qū)動器,或網(wǎng)絡(luò)連接等),這就是所謂的輸出操作(output operation)。

I/O 庫頭文件

下邊列出對于 C++ 程序重要的頭文件:

頭文件 功能和描述
<iostream> 這個頭文件定義了 cin、cout、cerrclog 對象,它們分別對應(yīng)于標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,無緩沖標(biāo)準(zhǔn)錯誤流和有緩沖標(biāo)準(zhǔn)錯誤流。
<iomanip> 這個頭文件聲明了用于執(zhí)行格式化 I/O 操作的一系列服務(wù),即所謂的參數(shù)化流操作,如 setwsetprecision。
<fstream> 這個頭文件聲明了基于用戶控制的文件處理服務(wù)。我們將在文件和流相關(guān)的章節(jié)更詳細(xì)討論關(guān)于它的內(nèi)容。

標(biāo)準(zhǔn)輸出流

預(yù)定義的對象 coutostream 類的一個實例。cout 對象通常連接到標(biāo)準(zhǔn)輸出設(shè)備,一般是顯示屏。cout 和流插入運算符聯(lián)合使用,流插入運算符寫為 <<,即兩個表示小于的符號,如以下示例所示。

    #include <iostream>

    using namespace std;

    int main( )
    {
       char str[] = "Hello C++";

       cout << "Value of str is : " << str << endl;
    }

編譯和執(zhí)行上面的代碼,運行結(jié)果如下:

    Value of str is : Hello C++

C++ 編譯器也決定了輸出的變量數(shù)據(jù)類型并選擇適當(dāng)?shù)牧鞑迦脒\算符來顯示值。<< 操作符重載了多種輸出數(shù)據(jù)項(包括各種內(nèi)置類型:整數(shù)、浮點數(shù)、雙精度浮點數(shù)、字符串和指針類型的值)。

插入運算符<<在一個語句中可能不止一次被使用,如上所示,endl 寫在結(jié)束的時候用于添加一個新行。

標(biāo)準(zhǔn)輸入流

預(yù)定義對象 cinistream 類的一個實例。cin 對象通常用于標(biāo)準(zhǔn)輸入設(shè)備,一般是鍵盤。cin 和流提取運算符聯(lián)合使用,流提取符號寫為>>即兩個表示大于的符號,如以下示例所示。

    #include <iostream>

    using namespace std;

    int main( )
    {
       char name[50];

       cout << "Please enter your name: ";
       cin >> name;
       cout << "Your name is: " << name << endl;

    }

編譯和執(zhí)行上面的代碼,它會提示輸入一個名稱。輸入一個值,然后回車,運行結(jié)果如下:

    Please enter your name: cplusplus
    Your name is: cplusplus

C++ 編譯器也決定輸入值的數(shù)據(jù)類型和選擇適當(dāng)?shù)牧魈崛∵\算符提取值并將其存儲在給定的變量。

流提取操作符>>可以在一個聲明中不止一次使用。請求多個數(shù)據(jù)時,可采用以下書寫形式:

    cin >> name >> age;

上述表達式等價于下面兩個聲明語句:

    cin >> name;
    cin >> age;

標(biāo)準(zhǔn)錯誤流

預(yù)定義對象 cerrostream 類的一個實例。cerr 對象通常附加到標(biāo)準(zhǔn)錯誤設(shè)備,這一般也是一個顯示屏,但對象 cerr 是無緩存的,每當(dāng)有流插入到 cerr 會導(dǎo)致其輸出立即出現(xiàn)。

cerr 也與流插入操作符一起使用,如以下示例所示。

    #include <iostream>

    using namespace std;

    int main( )
    {
       char str[] = "Unable to read....";

       cerr << "Error message : " << str << endl;
    }

編譯和執(zhí)行上面的代碼,運行結(jié)果如下:

    Error message : Unable to read....

標(biāo)準(zhǔn)日志流

預(yù)定義對象 clogostream 類的一個實例。clog 對象通常附加到標(biāo)準(zhǔn)錯誤設(shè)備,這一般也是一個顯示屏,但對象 clog 是有緩沖的。這意味著每個插入的 clog 會暫存在緩沖區(qū)中,直到緩沖區(qū)滿或者緩沖區(qū)刷新才會產(chǎn)生一次輸出。

clog 也與流插入操作符一起使用,如以下示例所示。

    #include <iostream>

    using namespace std;

    int main( )
    {
       char str[] = "Unable to read....";

       clog << "Error message : " << str << endl;
    }

編譯和執(zhí)行上面的代碼,運行結(jié)果如下:

    Error message : Unable to read....

在這些小例子中,你可能無法看出 cout,cerr,clog 的區(qū)別,但在編寫、執(zhí)行大項目時,差異就變得顯而易見了。所以這是很好的應(yīng)用實踐:使用 cerr 流顯示錯誤消息,而使用 clog 顯示其他日志信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號