1. 程式人生 > >c++11學習筆記之(iostream)緩衝區

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;