基本輸入輸出

2018-08-12 22:03 更新

基本輸入輸出

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

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

I/O 庫(kù)頭文件

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

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

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

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

    #include <iostream>

    using namespace std;

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

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

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

    Value of str is : Hello C++

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

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

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

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

    #include <iostream>

    using namespace std;

    int main( )
    {
       char name[50];

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

    }

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

    Please enter your name: cplusplus
    Your name is: cplusplus

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

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

    cin >> name >> age;

上述表達(dá)式等價(jià)于下面兩個(gè)聲明語(yǔ)句:

    cin >> name;
    cin >> age;

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

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

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

    #include <iostream>

    using namespace std;

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

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

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

    Error message : Unable to read....

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

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

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

    #include <iostream>

    using namespace std;

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

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

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

    Error message : Unable to read....

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)