1插入符與提取符
在輸入輸出流類庫中,過載了兩種運算子以簡化輸入輸出流的使用,運算子《常用做輸入輸出流的插入符,表明「輸出到」,例如cout << 「hello」是把字串「hello」輸出到螢幕上;運算子》常用做提取符,表明「賦值給」,例如 cin >> i 是把鍵盤輸入的資訊賦值給i。
標準輸入給不同型別變數賦值的不足示例。
#include using namespace std;
int main()
若在命令列上輸入1 how are you?,回車後執行結果為:
請輸入乙個整形數及乙個字串:1 how are you?
i=1str=how
實際上在互動過程中,經常需要一次輸入一行字串行,當這些字元安全地儲存到緩衝區後再進行掃瞄和轉換工作。在該示例中,並不能把輸入的串完全的放到記憶體中,下面講到的get系列函式很好的解決了這個問題。
2 get系列函式
常用的有3個函式。
(1)int get() ; 返回輸入流乙個字元的ascii值。
(2)istream& get(unsigned char* pszbuf, int nbuflen, char delim=』\n』);
pszbuf: 指向字元緩衝區的指標,用於儲存結果 nbuflen: 緩衝區長度 delim: 結束字元,根據結束字元判斷何時停止讀入操作
(3)istream& getline(unsigned char* pszbuf, int nbuflen, char delim=』\n』); 引數解釋同get
第2個get函式及getline函式都是讀一行記錄,那麼它們有什麼區別呢?細微而重要的區別在於:當遇到輸入流中的界定符(delim,即結束字元)時get()停止執行,但是並不從輸入流中提取界定符,直接在字串緩衝區尾部加結束標誌』\0』;函式getline()則相反,它將從輸入流中提取界定符,但仍然不會把它儲存到結果緩衝區中。
#include using namespace std;
int main()
//輸出結果
請輸入乙個字串:abcde
97the received string is: bcde
3 處理流錯誤
獲取狀態資訊的函式如下:
//判斷是否輸入整形數。
int main()
in.close();
return 0;
}struct student //學生成績結構體
;int main() ;//用結構體產生兩名學生的成績資訊
student st2 =;
out << st1.strname << "\t" << st1.ngrade << endl;//把成績資訊存到文字檔案
out << st2.strname << "\t" << st2.ngrade << endl;
out.close();
return 0;
}
可以看出,通過「<<」完成寫文字檔案是乙個較好的方法,這是因為「<<」操作符可把不同型別的資料直接輸出。結構體中strname是字串,ngrade是整形數,但均可直接輸出到檔案上即可。此外strname與ngrade之間採用「\t」輸出是為了資料對齊,而「endl」保證輸出「\n」回車符,保證了文字檔案的換行,是必須的。
讀寫二進位制檔案
主要是通過read()、write()函式完成讀寫二進位制檔案功能的,原型如下所示
第1個引數表明讀寫緩衝區的頭指標,第二個引數表明讀寫緩衝區的大小
//寫二進位制檔案:把學生成績資訊儲存至文。
struct student //學生成績結構體
;int main() ;//用結構體產生兩名學生的成績資訊
student st2 =;
out.write((const char *)&st1, sizeof(student)); //把成績資訊存到二進位制 檔案
out.write((const char *)&st2, sizeof(student));
out.close();
return 0;
}//讀二進位制檔案,並把結果顯示在螢幕上。
int main()
輸入輸出流緩衝
c++標準庫封裝了乙個緩衝區類streambuf,以供輸入輸出流物件使用。每個標準c++輸入輸出流物件都包含乙個指向streambuf的指標,使用者可以通過呼叫rdbuf()成員函式獲得該指標,從而直接訪問底層streambuf物件,可以直接對底層緩衝區進行資料讀寫,從而跳過上層的格式化輸入輸出操作。但由於類似的功能均可由上層緩衝區類實現,所以就不再加以論述了。streambuf最精彩的部分在於它過載了operator 《及operator >>。對operator 《來說,它以streambuf指標為引數,實現把streambuf物件中的所有字元輸出到輸出流出中;對operator >>來說,可把輸入流物件中的所有字元輸入到streambuf物件中。
//開啟乙個檔案並把檔案中的內容送到標準輸出中。
int main()
標準庫定義了三種型別的字串流。
//反解字串給各變數賦值
#include #include using namespace std;
int main()
//合併不同型別的資料到字串
int main()
#include #include using namespace std;
class student
;istream& operator>> (istream& is, student& s)
ostream& operator << (ostream& os, student& s) //student是普通物件
ostream& operator << (ostream& os, const student& s)//student是常物件
void f(const student& s)
int main(int argc, char *ar**)
對該程式著重理解主程式中cin>>s, cout << s的用法,它們均是對物件的操作。當cin >> s時,其實真正呼叫的是過載的istream& operator>> (istream& is, student& s),如何輸入是由該函式體來完成的;同理當cout << s時,真正呼叫的是過載的ostream& operator << (ostream& os, student& s),如何輸出由該函式體來完成;當student是常物件時,例如函式void f(const student& s)中cout<輸入輸出流
c 通過以下幾個類支援檔案的輸入和輸出 ofstream寫操作的檔案類由ostream引申而來 ifstream讀操作的檔案類由istream引申而來 fstream可同時讀寫操作的檔案類由iostream引申而來 ifstream in tian.txt 開啟乙個檔案 ifstream in in...
輸入輸出流
預定義流類的物件與通用的流運算子 1 cin 2 cout 3 cerr是ostream類物件,在標準輸出裝置上顯示錯誤資訊 不帶緩衝,立即顯示 輸入輸出流 ostream 和 ofstream istream 和 ifstream fstream 定義檔案輸出流物件 fstream outfile...
輸入輸出流
流 按照方向分為 輸入流和輸出流。以記憶體為參照物將資料從資料來源中讀取到記憶體,為輸入流,也叫讀取流。將資料從記憶體中寫入資料來源,為輸出流,也稱為寫入流 流按照型別分 分為位元組流,字元流和物件流。由於計算機採用二進位制,所有資料的傳輸都是以位元組為單位傳輸。所以無論是那種流,其本質都是位元組流...