未格式化的輸入 輸出操作

2022-05-28 04:27:11 字數 2739 閱讀 4158

單位元組 io 操作

說明is.get(ch)

從 istream is 讀取下乙個位元組存入字元 ch 中,返回 is

os.put(ch)

將字元 ch 輸出到 ostream os,返回 os

is.get()

將 is 的下乙個位元組作為 int 返回

is.putback(ch)

將字元 ch 放回 is,返回 is

is.unget()

將 is 向後 移動乙個位元組,返回 is

is.peek()

將下乙個位元組作為 int 返回,但不從流中刪除它

char ch;

while(cin.get(ch))

cout.put(ch);

一般情況下,在讀取下乙個值之前,標準庫保證可以最多退回乙個值,即標準庫不保證在中間不進行讀取操作的情況下能連續呼叫 putback、unget。

char ch1,ch2;

ch1 = cin.peek(); //@ 讀而不取

cout << ch1 << endl;

ch2 = cin.get();

cout << ch2 << endl;

char ch1, ch2, ch3, ch4;

cin >> ch1 >> ch2 >> ch3;

cin.unget(); //@ 最後讀取的字元回退到流

cin >> ch4; //@ ch3 == ch4

cout << "***************==" << endl;

cout << ch1 << endl;

cout << ch2 << endl;

cout << ch3 << endl;

cout << ch4 << endl;

char ch1, ch2, ch3, ch4;

cin >> ch1 >> ch2 >> ch3;

cin.putback(ch3); //@ 最後讀取的字元回退到流,引數必須是最後讀取的字元

cin >> ch4; //@ ch3 == ch4

cout << "***************==" << endl;

cout << ch1 << endl;

cout << ch2 << endl;

cout << ch3 << endl;

cout << ch4 << endl;

peek 和無參版本的 get 都返回 int 型別的值。

返回 int 的原因是,可以返回檔案尾後標記,char 範圍的每個值都可以表示乙個真實的字元,但是取值範圍中沒有額外的值可以用來表示檔案尾。

返回 int 的函式將它們返回的字元首先轉換為 unsigned char,然後再將結果提公升到 int。

標準庫使用負值作為檔案尾, cstdio 中定義了 eof 用於表示檔案尾:

while((ch = cin.get()) != eof)

cout.put(ch);

多位元組的未格式化 io 一次可以操作大塊資料,這些操作要求分配並管理用來儲存和提取資料的字元陣列:

多位元組 io 操作

說明is.get(sink,size,delim)

從 is 中最多讀取 size 個位元組,並儲存在字元陣列中,sink 表示字元陣列的起始位址,讀取過程中直至遇到字元 delim 或讀取 size 個位元組或遇到檔案尾時停止。如果遇到 delim,則將其保留在輸入流中,不讀取出來存入 sink。

is.getline(sink,size,delim)

與接受三個引數的 get 版本類似,但會讀取並丟棄 delim。

is.read(sink,size)

讀取最多 size 個位元組,存入字元陣列 sink 中,返回 is。

is.gcount()

返回上乙個未格式化讀取操作從 is 讀取的位元組數。

os.write(source,size)

將字元陣列 source 中的 size 個位元組寫入 os,返回 os。

is.ignore(size,delim)

讀取並忽略最多 size 個字元,包括 delim,與其他未格式化函式不同,ignore 有預設引數,size 的預設值是1,delim 的預設值為檔案尾。

get 和 getline 接受相同的引數,sink 表示乙個 char 陣列,用來表示資料。兩個函式都一直讀取資料,直到下面的條件之一發生:

兩個函式的差別是對分隔符的處理,get 將分隔符留在 istream 中的下乙個字元,而 getline 則讀取並丟棄分隔符,無論哪個函式都不會將分隔符儲存到 sink 中。

呼叫 gcount 可以確定最後乙個未格式化輸入操作讀取了多少個字元,應該在任何後續未格式化輸入操作之前呼叫 gcount 。特別是,將字元退回流的單字元操作也屬於未格式化輸入操作。如果在呼叫 gcount 之前呼叫了 peek,unget,putback,則 gcount 的返回值為 0。

如果把 get 或者 peek 的返回值賦予乙個char 而不是 int,則因為不同的編譯平台對 char 有不同的解釋,如果將 char 解釋為 unsigned char :

char ch;

while((ch = cin.het()) != eof)

cout.put(ch); //@ 因為如果讀到 eof 將其賦值給 char,將導致死迴圈

未格式化的輸入 輸出操作

標準庫提供了一組低層操作,支援未格式化io unformatted io 這些操作允許我們將乙個流當作乙個無解釋的位元組序列來處理。一般情況下,在讀取下乙個值之前,標準庫保證我們可以退回最多乙個值。即,標準庫不保證在中間不進行讀取操作的情況下能連續呼叫putback或unget。確定讀取了多少個字元...

C 格式化輸入輸出操作

操作符 含義輸入輸出 dec以十進位制顯示 預設設定 i ohex 以十六進製制顯示 i ooct 以八進位制顯示 i osetbase int n 設定數制基數為n 0,8,10,16 0表示預設 十進位制 ws提取空白字元 iends 插入空字元 oendl 插入換行符,然後重新整理ostrea...

格式化輸入 輸出

scanf 函式和 printf 函式是c語言程式設計中使用最頻繁的兩個函式,他們用來格式化輸入和輸出。printf 函式 printf 格式串,表示式1,表示式2 格式串包含普通字元和轉換說明 轉換說明以 字元開頭 轉換說明可以用 m.px格式或 m.px格式 m和p都是整數常量,而x是字母。m和...