程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++標准輸出流詳解

C++標准輸出流詳解

編輯:C++基礎知識
標准輸出流是流向標准輸出設備(顯示器)的數據。ostream類定義了個輸出流對象,即cout、cerr、clog,分述如下。

cout流對象

cont是console output的縮寫,意為在控制台(終端顯示器)的輸出。前邊已對cout作了一些介紹(詳情請查看:與C++輸入輸出有關的類和對象),在此再強調幾點。

1) cout不是C++預定義的關鍵字,它是ostream流類的對象,在iostream中定義。 顧名思義,流是流動的數據,cout流是流向顯示器的數據。cout流中的數據是用流插入運算符“<<”順序加入的。如果有
    cout<<"I "<<"study C++ "<<"very hard.";
按順序將字符串"I ", "study C++ ", "very hard."插人到cout流中,cout就將它們送到顯示器,在顯示器上輸出字符串"I study C++ very hard."。cout流是容納數據的載體,它並不是一個運算符。人們關心的是cout流中的內容,也就是向顯示器輸出什麼。

2)用“ccmt<<”輸出基本類型的數據時,可以不必考慮數據是什麼類型,系統會判斷數據的類型,並根據其類型選擇調用與之匹配的運算符重載函數。這個過程都是自動的,用戶不必干預。如果在C語言中用prinf函數輸出不同類型的數據,必須分別指定相應的輸出格式符,十分麻煩,而且容易出錯。C++的I/O機制對用戶來說,顯然是方便而安全的。

3) cout流在內存中對應開辟了一個緩沖區,用來存放流中的數據,當向cout流插 人一個endl時,不論緩沖區是否已滿,都立即輸出流中所有數據,然後插入一個換行符, 並刷新流(清空緩沖區)。注意如果插人一個換行符”\n“(如cout<<a<<"\n"),則只輸出和換行,而不刷新cout流(但並不是所有編譯系統都體現出這一區別)。

4) 在iostream中只對"<<"和">>"運算符用於標准類型數據的輸入輸出進行了重載,但未對用戶聲明的類型數據的輸入輸出進行重載。如果用戶聲明了新的類型,並希望用"<<"和">>"運算符對其進行輸入輸出,應該按照前面介紹的方法(詳情請查看:C++運算符重載),對"<<"和">>"運算符另作重載。

cerr流對象

cerr流對象是標准錯誤流,cerr流已被指定為與顯示器關聯。cerr的作用是向標准錯誤設備(standard error device)輸出有關出錯信息。cerr與標准輸出流cout的作用和用法差不多。但有一點不同:cout流通常是傳送到顯示器輸出,但也可以被重定向輸出到磁盤文件,而cerr流中的信息只能在顯示器輸出。當調試程序時,往往不希望程序運行時的出錯信息被送到其他文件,而要求在顯示器上及時輸出,這時應該用cerr。cerr流中的信息是用戶根據需要指定的。

[例13.1] 有一元二次方程ax2+bx+c=0,其一般解為

但若a=0,或b2-4ac<0時,用此公式出錯。

編程序,從鍵盤輸入a、b、c的值,求x1和x2。如果a=0或b2-4ac<0,輸出出錯信息。
#include <iostream>
#include <cmath>
using namespace std;
int main( )
{
   float a,b,c,disc;
   cout<<"please input a,b,c:";
   cin>>a>>b>>c;
   if (a==0)
      cerr<<"a is equal to zero,error!"<<endl;
   //將有關出錯信息插入cerr流,在屏幕輸出
   else
      if ((disc=b*b-4*a*c)<0)
         cerr<<"disc=b*b-4*a*c<0"<<endl;   //將有關出錯信息插入cerr流,在屏幕輸出
      else
      {
         cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;
         cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;
      }
   return 0;
}
運行情況如下:
①please input a,b,c: 0 2 3↙
a is equal to zero,error!

②please input a,b,c: 5 2 3↙
sc=b*b-4*a*c<0

③please input a,b,c: 1  2.5  1.5↙
x1=-1
x2=-1.5

clog流對象

clog流對象也是標准錯誤流,它是console log的縮寫。它的作用和cerr相同,都是在終端顯示器上顯示出錯信息。區別:cerr是不經過緩沖區,直接向顯示器上輸出有關信息,而clog中的信息存放在緩沖區中,緩沖區滿後或遇endl時向顯示器輸出。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved