C 學習筆記28 輸入與輸出

2021-10-02 15:52:44 字數 2929 閱讀 6233

1 與輸入輸出相關的類

(1)

--> ifstream

--> istream

ios --> iostream --> fstream

--> ostream:

--> ofstream

(2)cin是istream的物件, cout是ostream的物件

(3)ifstream:對檔案進行讀操作,ofstream:對檔案進行寫操作

(4)fstream:開啟檔案,進行讀寫操作都可以

2 與輸入輸出流操作相關的類

-- istream用於輸入的流類,cin就是該類物件。

-- ostream用於輸出的流類,cout就是該類的物件。

-- ifstream用於從檔案讀取資料的類

-- ofstream用於從檔案寫入資料的類

-- iostream是既能用於輸入,也能用於輸出的類

-- fstream時既能從檔案讀取資料,又能向檔案寫入資料

3 標準流物件

-- 輸入流物件:cin 與標準輸入裝置相連線

-- 輸出流物件:cout 與標準輸出裝置相連線

-- cerr 與標準錯誤輸出裝置相連線

-- clog 與標準錯誤輸出裝置相連線

預設情況下

cerr << "hello" << endl;

clog << "hello" << endl;

和cout << "hello" << endl; 一樣

-- cin對應於標準輸入流,用於從鍵盤讀取資料,也可以被重定向為從檔案中讀取資料

-- cout對應於標準輸出流,用於向螢幕輸出資料,也可以被重定向為向檔案寫入資料

-- cerr對應於標準錯誤輸出流,用於向螢幕輸出出錯資訊

-- clog對應於標準錯誤輸出流,用於向螢幕輸出出錯資訊

-- cerr和clog的區別在於cerr不使用緩衝區,直接向顯示器輸出資訊;而輸出到clog中的資訊先會被存放在緩衝區,緩衝區滿或者重新整理時才輸出到螢幕

4 輸出重定向例子(見本工程shuchu1.cpp)

//

// 輸出重定向例子

//#include

using

namespace std;

intmain()

5 輸入重定向例子(見本工程shuru1.cpp)

//

// 輸入重定向例子

//#include

using

namespace std;

intmain()

6 判斷輸入流結束

可以用如下方法判斷輸入流結束:

int x;

while(cin >> x)

return 0;

問題: 根據右移運算子在istream類中的過載,它的返回值應該是istream的引用,也就是說這個表示式的返回值應該是cin的引用,也就是cin

那麼cin怎麼可以作為條件?

istream& operator >> (int a)

解答:用到了強制型別轉換運算子的過載,在istream中有個強制型別轉換運算子的過載就能將cin物件強制轉換成bool型別值,當輸入結束的時候,cin被強制轉換成布林型別的false,while迴圈就會結束

(1)如果是從檔案輸入,比如前面有freopen("some.txt", "r", stdin);那麼,讀取到檔案末尾,輸入流就算結束

(2)如果從鍵盤輸入,則在單獨一行輸入ctrl + z代表輸入流結束

7 istream類的成員函式

(1)istream& getline(char* buf, int bufsize);

從輸入流中讀取bufsize-1個字元到緩衝區buf,或讀到碰到『\n』為止(哪個先到算哪個)

(2)istream& getline(char* buf, int bufsize, char delim);

從輸入流中讀取bufsize-1個字元到緩衝區buf, 或讀到噴到delim字元為止(哪個先到算哪個)

(3)兩個函式都會自動在buf中讀入資料的結尾新增\0。『n』或者delim都不會被讀入buf,但會被從輸入流中取走。

如果輸入流中『\n』或delim之前的字元個數達到或超過了bufsize個,就導致讀入出錯,其結果就是:雖然本次讀入已經完成,但是之後的讀入就會失敗了

(4)可以用if(!cin.getline(...))判斷輸入是否結束

(5)bool eof(); // 判斷輸入流是否結束

(6)int peek(); // 返回下乙個字元,但不從流中去掉

(7)istream& putback(char c); // 將字元c放回輸入流

(8)istream& ignore(int ncount = 1, int delim = eof);

從流中刪掉最多ncount個字元,遇到eof時結束。

(9)使用getline經常碰到的問題(見本工程istream1.cpp)

//

// istream類中使用getline會經常碰到的問題

//#include

using

namespace std;

intmain()

/** * 結果描述

* 輸入:

* 12 abcd 回車

* 輸出:

* 空格 abcd

* * 輸入:

* 12回車 即使沒有任何語句讀取到buf,getline依然在buf中輸入'\0'

* 程式立即結束

* 輸出:

* */

perl學習筆記 輸入與輸出

注意 1,會處理所有的輸入,直到所有輸入的結尾為止 一般在乙個程式中只有乙個 若出現多次則可能發生錯誤。2,呼叫引數 ar ar 是乙個裝著呼叫引數的陣列 1,讀取從鍵盤輸入的值 注意 只讀取鍵盤輸入的一行,到換行符結束 用chomp去掉換行符 若沒有賦值給變數,則預設存在 中 usr bin pe...

C 學習筆記 輸入輸出

一 資料的輸入和輸出 1 字元輸入函式 getchar 例如 1 include2 include3 intmain 4 2 字元輸出 putchar 語法格式 1 putchar ch 其中,ch為乙個字元變數或常量。3 通過cout流輸出資料 格式1 cout 表示式 格式2 cout 表示式1...

C語言學習筆記之輸入與輸出

單個字元 c 字串 s ascii表對應的值 ascii表原圖 常用的對應關係 a z 65 90 a z 97 122 0 9 48 57 因此,字元和整數沒有本質的區別。char變數在記憶體中儲存的是字元對應的ascii值。include intmain 強制型別轉換 自動型別轉換 無論是強制轉...