(十)C 學習 輸入輸出流

2021-10-09 05:38:09 字數 4075 閱讀 9224

在c ++

++c+

+中,與輸入輸出相關的類的繼承與派生關係如下:

我們常用的輸入流物件cin和輸出流物件cout又稱為標準流物件,它們位於命名空間std中。除此之外,還有cerrclog等與標準錯誤輸出裝置相連的物件。通常,在預設的情況下,以下語句完成的功能是一致的:

cerr <<

"hello world!"

<

clog <<

"hello world!"

<

cout <<

"hello world!"

<

下面是輸出重定向的例子:

#include

using

namespace std;

intmain()

// 否則將計算結果存放到test.txt檔案中

else

return0;

}

下面是輸入重定向的例子:

#include

using

namespace std;

intmain()

int x;

while

(cin >> x)

如果是從檔案輸入,那麼讀取到檔案尾部時上面迴圈被打破,此時輸入流就算結束;如果從鍵盤輸入,則在單獨一行輸入ctrl + z代表輸入流結束。

istream類是用於控制輸入流的類,它有幾個重要成員函式。首先是過載成員函式getline。第一種過載形式如下:

istream&

getline

(char

* buf,

int bufsize)

;

從輸入流中讀取bufsize - 1個字元到緩衝區buf,或讀取時碰到\n時提前結束。第二種過載形式如下:

istream&

getline

(char

* buf,

int bufsize,

char delim)

;

從輸入流中讀取bufsize - 1個字元到緩衝區buf,或讀取時碰到字元delim時提前結束。兩個函式都會自動在buf中讀入資料的結尾新增\0\n或字元delim都不會被讀入buf,但會被從輸入流中取走(刪除)。如果輸入流中的\n或字元delim之前的字元個數達到或超過了bufsize個,就會導致讀入出錯。其結果就是:雖然本次讀入已經完成,但是之後的讀入就會失敗了istream類的其他幾個成員函式:

#include

using

namespace std;

intmain()

用流操縱運算元控制輸出格式就是規範化輸出格式,主要包括以下幾點:

在使用流操縱運算元前,需要引入標頭檔案iomanip。如整數流的基數用法如下:

int n =10;

cout << n <

// 輸出10,十進位制

cout << hex << n << endl;

// 輸出a,十六進製制

cout << dec<< n << endl;

// 輸出10,十進位制

cout << oct<< n << endl;

// 輸出12,八進位制

控制浮點數精度的流操縱運算元

cout.

precision(5

);cout <<

setprecision(5

);

上面兩條語句的功能相同,在以非定點方式(小數點可能不位於個數的右邊,如科學計數法。預設)輸出時,指定輸出浮點數的有效位數;在以定點方式(小數點一定位於個位數的右邊,即我們平常所使用的浮點數的標準表示形式)輸出時,指定輸出浮點數的小數點後的有效位數。如:

#include

#include

using

namespace std;

intmain()

對於第一條語句的輸出,由於非定向方式為預設情況,所以輸出需要對1234567.89保留六位有效數字,由於整數部分已經超過六位,這裡只能使用科學計數法表示。下面是以定點方式輸出保留小數點後六位的結果:

#include

#include

using

namespace std;

intmain()

定點輸出方式向非定點輸出方式的轉變:

double x =

1234567.89

;cout <<

setiosflags

(ios::fixed)

<<

setprecision(6

)<< x << endl;

// 定點方式輸出

cout <<

resetiosflags

(ios::fixed)

<< x << endl;

// 取消以定點方式輸出

設定域寬即設定輸出內容所佔的寬度,寬度設定的有效性是一次性,在每次輸入和輸出之前都要設定寬度。如:

int

main()

}

最後來看乙個流操縱運算元的綜合例子:

#include

#include

using

namespace std;

intmain()

輸出如下:

同時,除了c++

++c+

+提供的流操縱運算元,使用者也可以自定義流操縱運算元。自定義流操縱運算元的過程類似於函式的過載,如:

ostream& tab (ostream& output)

定義如上函式後,在輸出格式中tab相當於乙個製表符\t。如下:

// 輸出為aa	bb

cout <<

"aa"

<< tab <<

"bb"

<< endl;

本文介紹了c++

++c+

+中的輸入輸出流,並以從鍵盤或檔案讀寫為例說明。然後詳細介紹了使用流操縱運算元控制程式的輸出格式,這是我們平時在寫程式時常用到的內容。最後,以乙個綜合的例子來介紹常用到的使用流操縱運算元的情景。

北京大學公開課:程式設計與演算法(三)c++物件導向程式設計.

C 輸入 輸出流

低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。不帶引數值成員函式get 從指定的流中讀取乙個字元 即使是空格 並返回該字元作...

C 輸入輸出流

一 c 流的概念 在c 語言中,資料的輸入和輸出 簡寫為i o 包括對標準輸入裝置鍵盤和標準輸 出裝置顯示器 對在外存磁碟上的檔案和對記憶體中指定的字串儲存空間 當然可 用該空間儲存任何資訊 進行輸入輸出這三個方面。對標準輸入裝置和標準輸出設 備的輸入輸出簡稱為標準i o,對在外存磁碟上檔案的輸入輸...

C 輸入 輸出流

一 流低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。二 成員函式get和getline 不帶引數值成員函式get 從指定的流...