在c ++
++c+
+中,與輸入輸出相關的類的繼承與派生關係如下:
我們常用的輸入流物件cin
和輸出流物件cout
又稱為標準流物件,它們位於命名空間std
中。除此之外,還有cerr
、clog
等與標準錯誤輸出裝置相連的物件。通常,在預設的情況下,以下語句完成的功能是一致的:
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 從指定的流...