標準輸入輸出
阿新 • • 發佈:2022-04-01
標準輸入輸出
標準輸入輸出流
-
cin 標準輸入
-
cout 標準輸出
-
cerr 標註錯誤
-
流的四種狀態
goodbit 有效狀態,只有流有效時,才能正常使用
badbit 表示系統級別的錯誤
eofbit 表示到達了流的末尾
fialbit 表示發生了錯誤
bool bad() const; //若流的badbit置位,則返回true;否則返回false bool fail() const; //若流的failbit或badbit置位,則返回true;
bool eof() const; //若流的eofbit置位,則返回true;
bool good() const; //若流處於有效狀態,則返回true;
extern istream cin; /// Linked to standard input
extern ostream cout; /// Linked to standard output
extern ostream cerr; /// Linked to standard error (unbuffered)
extern ostream clog; /// Linked to standard error (buffered)
在使用流的過程中要時刻注意流的狀態,防止發生流失效的情況。
-
原始碼裡面是用列舉表示的
重置流的狀態
1、呼叫clear方法,進行重置
//clear的無參版本會復位所有錯誤標誌位*(重置流的狀態)
void clear(std::ios_base::iostate state = std::ios_base::goodbit);
2、清空緩衝區
//讀取到前count個字元或在讀這count個字元程序中遇到delim字元就停止,並把讀取的這些東西丟掉
istream & ignore(std::streamsize count = 1, int_type delim = Traits::eof());
void test1(){
int number=-1;
//通過終端獲取一個整形資料
while(cin>>number,!cin.eof())//表示沒有讀到流的末尾的時候
{
if(cin.bad()){
cout<<"cin had broken!"<<endl;//表示錯誤
return ;
}else if(cin.fail()){
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');\
//ignore的使用
cout<<"pls input a valid integer:"<<endl;;
}else{
cout<<"number:"<<number<<endl;
}
}
緩衝區
/*
此緩衝區就是一塊記憶體區,它用在輸入輸出裝置和CPU之間,用來快取資料。它使得低速的輸入輸出裝置和高速的CPU能夠協調工作,避免低速的輸入輸出裝置佔用CPU,解放出CPU,使其能夠高效率工作。
*/
緩衝區分為三種類型:全緩衝、行緩衝和不帶緩衝。
-
全緩衝:在這種情況下,當填滿標準I/O快取後才進行實際I/O操作。全緩衝的典型代表是對磁碟檔案的讀寫。
-
行緩衝:在這種情況下,當在輸入和輸出中遇到換行符時,執行真正的I/O操作。這時,我們輸入的字元先存放在緩衝區,等按下回車鍵換行時才進行實際的I/O操作。典型代表是鍵盤輸入資料。
-
不帶緩衝:也就是不進行緩衝,標準出錯情況cerr/stderr是典型代表,這使得出錯資訊可以直接儘快地顯示出來
//當位元組數大於1024個位元組時,通過cout輸出的資料會立刻顯示在終端上,不需要再等待三秒
void test0(){
for(int i=0;i<1025;i++){
cout<<'a';
}
sleep(3);
}