c++11學習筆記之(iostream)緩衝區
c++ primer 5 中page 23頁中術語表中緩衝區(buffer)概念不是很清楚。故終結如下
緩衝區(buffer)一個儲存區域,用於儲存資料。IO裝置通常將輸入/輸出資料儲存在一個緩衝區中,讀寫緩衝區的動作通常與程式中的動作是無關的。我們可以顯示的重新整理輸出緩衝,以便強制將緩衝區中的素具寫入輸出裝置,預設情況下,讀cin會重新整理cout;程式非正常終止也會重新整理cout。
cout 標準輸出流 對應裝置為螢幕,也可以被重定向輸出到磁碟檔案。經過緩衝區,緩衝區滿後或遇到endl時向顯時器輸出。
cerr 標準錯誤流 對應裝置為螢幕,不經過緩衝區,直接向螢幕輸出有關資訊。
cout 標準錯誤流 對應裝置為螢幕。經過緩衝區,緩衝區滿後或遇到endl時向顯時器輸出。
1.cout流
cout是console output的縮寫。cout不是c++預定義的關鍵字,它是ostream流類的物件,在iostream中定義。
cout流在記憶體中對應開闢了一個緩衝區,用來存放流的資料,當向cout流插入一個endl時,
不論緩衝區是否已滿,都立即輸出流中所有資料,然後插入一個換行符。
在iostream中只對 << 和 >>運算子用於標準型別資料的輸入和輸出進行了過載。
使用者自定義的型別資料輸入和輸出需要自己定義過載。
cout 流通常是傳送到顯示器輸出,但也可以被重定向輸出到磁碟檔案。
2.cerr流
cerr流是標準錯誤流,被指定與顯示器關聯。
不經過緩衝區,直接輸出給螢幕。
cout 流通常是傳送到顯示器輸出,但也可以被重定向輸出到磁碟檔案。
而cerr流中的資訊只能在顯示器輸出。
3.clog流物件
clog流物件也是標準錯誤流,它是console log的縮寫。它的作用和cerr相同,都是在終端顯示器上顯示出錯資訊。
它們之間只有一個微小的區別:cerr是不經過緩衝區,直接向顯示器上輸出有關資訊,而clog中的資訊存放在緩衝區中,緩衝區滿後或遇到endl時向顯時器輸出。
//////////////////////////////////////////////////////////////////////////以下看例子
4.cin
char ch;
while((ch=cin.get())!='\n')
cout.put(ch+4);
cout<<endl;
char str[255];
cin.getline(str,255);
5.istrstream
#include
#include
using namespace std;
int main()
{
char str[255]="1001 周雲才 98.5";
int num;
char name[20];
float score;
istrstream is(str);
is>>num>>name>>score;
cout<<num<<" "<<name<<" "<<score<<endl;
return 0;
}
6.獲取字串中的數字存入陣列
#include
#include
#include
using namespace std;
int main(){
char ch,str[255]="a123x456U17960?302tab5876";
int a[10]={0},i=0;
istrstream is(str);
while(is.eof()==false){
while(!isdigit(ch=is.get()));
is.putback(ch);
is>>a[i++];
}
copy(a,a+i,ostream_iterator(cout," "));
cout<<endl;
return 0;