1. 程式人生 > >C++輸入輸出的格式控制1

C++輸入輸出的格式控制1

》預設的輸入輸出格式

        在沒有特地進行格式控制的情況下,輸入輸出採用預設格式。

        >預設的輸入格式

        C++流所識別的輸入資料的型別及其預設的輸入格式:

              # short   、int    、long(signed  、unsigned):與整型常量同

              # float   、double   、long double:與浮點數常量同

              # char(signed   、unsigned):第一個非空白字元

              # char *(signed  、unsigned):從第一個非空白字元開始到下一個空白字元結束

              # void *:無字首的16進位制數

              # bool:把true或1識別為true,其他的均識別為false(VC6.0中把0識別為false,其他的值均識別為true)

        示 例:執行

             int a,b; char c; char d[30];

             cin>>a>b>>c>>d;   時,若輸入

             123     456abcd   efg

             則a的值為123,b的值為456,c的值為‘a’,d的值為“bcd”。

        >預設的輸出格式

        C++流所識別的輸出資料的型別及其預設的輸出格式:

              # char(signed   、unsigned):單個字元(無引號)

              # short   、int   、long(signed  、unsigned):一般整型形式,負數前有-號

              # char *(signed  、unsigned):字元序列(無引號)

              # float  、double  、long double:浮點格式或指數格式(科學表示法),取決於哪個更短

              # void *:無字首的16進位制數

              # bool:1或0

        示   例:執行

        char c='A',*p="hello!";

        cout<<123<<c<<-123<<endl;

        cout<<p<<(void *)p;

        將輸出:

             123A-123

             hello!0041B18C

         注:0041B18C是變數p的十六進位制地址。在不同環境下執行上面的語句,該值可能不同。

》格式標誌與格式控制

        在作為流庫根類的ios_base中,有一個作為資料成員的格式控制變數,專門用來記錄格式標誌;通過設定標誌,可以有意識地對格式輸入輸出的效果加以控制。各種格式標誌被定義為一組符號常量。

        在輸入輸出的格式控制中,大部分是通過設定格式標誌實現的,也可以通過使用專用的操作符進行設定。在下面的與專用操作符進行格式控制等效的格式控制函式中,在表示函式呼叫格式時,i表示任意的輸入流物件,o表示任意的輸出流物件,io表示任意的輸入流物件或輸出流物件。

》輸入輸出寬度的控制

        寬度設定用於輸入時,只對字串有效,輸出時指最小輸出寬度。當實際資料寬度小於指定的寬度時,多餘的位置用填充字元(通常是空格)填滿;當實際資料的寬度大於設定的寬度時,扔按實際的寬度輸出。初始寬度值為0,其含義是所有資料都按實際寬度輸出。與寬度設定有關的操作符是

               # setw(int n):設定輸入輸出的寬度。

               等價函式呼叫為:io.width(n)

        其中n為一個表示寬度的表示式。如果用於字串輸入,實際輸入的字串的最大長度為n-1.也就是說寬度n連字串結束符也包含在內。函式width返回此前設定的寬度。

        注:寬度設定的效果只對一次輸入或輸出有效,在完成了一個數據的輸入或輸出後,寬度設定自動恢復為0(表示按資料實際寬度輸入輸出)。寬度設定是所有格式設定中唯一的一次有效的設定。

        示  例:

        cout<<123<<endl;

        cout.width(10); cout<<123<<456<<endl;

        cout<<setw(10)<<123<<setw(10)<<456;

        輸出結果為:

        123

                  123456

                  123          456

》浮點數輸出方式的控制

        在初始狀態下,浮點數按浮點格式輸出,輸出精度是指有效位的個數,小數點的相對位置隨資料的不同而浮動;將浮點數改變為按定點格式或指數格式(科學表示法,如3.2156e+2)輸出時,輸出精度是指小數位數,小數點的相對位置固定不變,必要時進行舍入處理或新增無效0。浮點數輸出方式的設定一直有效,直到再次設定浮點數輸出方式時為止。

        有關操作符:

           # resetiosflags(ios_base::floatfield):(此為預設設定)浮點數按浮點格式輸出

              等價函式呼叫:o.unsetf(ios_base::floatfield)

           # fixed:浮點數按定點格式輸出

              等價函式呼叫:o.setf(ios_base::fixed,ios_base::floatfield)

           # scientific:浮點數按指數格式(科學表示法)輸出

              等價函式呼叫:0.setf(ios_base::scientific,ios_base::floatfield)

           示  例:

           cout<<314.15926535<<endl;

           cout<<fixed<<314.15926535<<endl;

           cout<<scientific<<314.15926535<<endl;

           將輸出:

           314.159

           314.159265

           3.141593e+002

           注:精度的預設值是6位。輸出的第一行說明,浮點數的預設格式為浮點格式,這種情況下精度的含義是有效位數。輸出第二行和第三行說明,對於定點格式和指數格式,精度的含義是小數位數。

》輸出精度的控制

        輸入輸出的精度是針對浮點數設定的,其實際含義與浮點數輸出方式有關:如果採用浮點數格式,精度的含義是有效位數;如果採用定點格式或指標格式(科學表示法),精度的含義是小數位數。精度的設定用於輸出,預設值為6,可以通過設定改變精度;將精度值設定為0意味著回到預設精度6。精度值的設定一直有效,直到再次設定精度時為止。

        有關操作符:

           # setprecision(int n):設定浮點數的精度(有效位數或小數位數)

             等價函式呼叫:io.precision(n)

           其中n為表明精度值的表示式。函式precision返回此前設定的精度

        示  例:

                  cout<<fixed<<1234.5678<<endl<<setprecision(2)<<1234.5678

         將輸出:

                  12.345678

                  12.35

          對輸出精度進行控制,並結合浮點數輸出方式和輸出寬度的控制,可以實現報表輸出中的小數點對齊。

         示   例:顯示輸出一個兩位以內整數的平方根表

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main(){
	int i;
	cout<<"    |";
	for(i=0;i<10;i++) cout<<setw(5)<<i<<"  ";
	cout<<endl<<"----+";
	for(i=0;i<10;i++) cout<<"-------";
	cout<<fixed<<setprecision(3);
	for(i=0;i<10;i++){
		cout<<endl<<setw(2)<<i<<"  |";
		for(int j=0;j<10;j++) cout<<setw(7)<<sqrt(i*10+j);
	}
	cout<<endl<<endl;

	system("pause");
	return 0;
}
        程式執行結果: