CIN和COUT原理和常用用法
1. 原理:
#include <iostream>
其中,i/o表示輸入輸出,stream表示流。
cin表示輸入流,其操作符 >> 意思為提取,其操作過程為【鍵盤->"hello"->cin輸入流-> ">>"提取->變數】
在定義流物件時,系統會在記憶體中開闢一段緩衝區,用來暫存資料。執行cin輸入時,系統會根據變數的型別,從輸入流中提取相應長度的位元組,並賦給變數。一般情況下,用>>操作符連續輸入時,是跳過空格和回車的。且只有收到回車鍵時,緩衝區中的輸入流才會被按順序全部提取。如果提取之後發現數據不夠,則繼續輸入;否則,剩餘的資料會被存入緩衝區;下次輸入時,如果緩衝區還有資料,則直接使用緩衝區資料,不會給使用者在介面顯示游標提醒其繼續輸入。
cout表示輸出流,其操作符 <<表示插入,其操作過程為【顯示器<-cout輸出流<-"<<"插入<-“hello”程式】。同理,只有當收到換行符時(或緩衝區滿),才會將緩衝區資料一併清空並在顯示裝置輸出。
2. 輸入函式
2.1 cin (連續輸入時,留下最後一個換行符)
讀取資料時忽略空格、換行、tab,按位元組提取。但有些要用符號來分隔。
例如,int a ,float b; cin >> a >> b; 輸入時應使用 :333空格34.5回車。最後的回車會被留在緩衝區。
2.2 cin.get()(會留下換行符)
用來讀取字元/規定長度的字串。
2.2.1 char a; a = cin.get(); 或 char a; cin.get(a); 此時可以接受空格或換行作為字元輸入。除了接受的字元以外,代表結束的回車會被留在緩衝區。
2.2.2 char a[20]; cin.get(a, 20); 可接受空格和字元,最多接受19個字元,最後一位是‘\0’.
2.2.3 cin.get(); 提取輸入流中的一個字元,這種用法可以用於捨棄輸入流中不需要的字元。
2.3 cin.getline(); (不會留下換行符)
用來讀取字串。完整的寫法為cin.getline(name, size, flag); flag表示到這個字元的時候結束接受,預設為\0.最後的flag是被捨棄的。
2.4 清除緩衝區
cin.clear(); 將cin的狀態置位true。一般用在while(cin)時,一旦出現輸入錯誤,需先將cin狀態置位true,才能繼續輸入。
cin.ignore();可以控制清除緩衝區的位置。例如cin.ignore(size, nflag); 就是緩衝區的字元,直至遇到nflag結束,且nflag會被捨棄,最大清除size個。如果直接使用cin.ignore()的意思是清除結束符EOF之前的1個字元,如果不給結束符,那就只清除一個字元。
cin.sync();清除緩衝區所有。