要設定輸入/輸出的格式,可以使用C++提供的「I/O控制參數(或稱 I/O旗幟參數)」與setf()函式。
C++先說明I/O控制參數,I/O控制參數是定義在ios_base類別底下的整數常數,呼叫時需要在其名稱前面加上ios_base::。各種I/O控制參數的名稱和功用如下:
旗幟(flag)參數名稱 |
旗幟參數群組 |
功能 |
Ios_base::left |
Ios_base:: adjustfield |
輸出資料靠左對齊 |
Ios_base::right |
輸出資料靠右對齊 |
|
Ios_base::internal |
輸出資料正負號靠左對齊,數字靠右對齊 |
|
Ios_base::dec |
Ios_base:: basefield |
數據以十進位輸出(系統預設為成立) |
Ios_base::hex |
數據以十六進位輸出 |
|
Ios_base::oct |
數據以八進位輸出 |
|
Ios_base::fixed |
Ios_base:: floatfield |
數據以小數點方式輸出 |
Ios_base::scientific |
數據以科學記號方式輸出 |
|
Ios_base::showpoint |
|
顯示浮點數的小數點與末位的0 |
Ios_base::showbase |
|
八進位數字,數字之前加一個0 十六進位數字,數字之前加上0x |
Ios_base::showpos |
|
若數據為正數,在其之前加一個+ |
Ios_base::uppercase |
|
十六進位數字與科學記號的字母,用大寫 |
Ios_base::skipws |
|
輸入時,空白字元當作終止字元(系統預設為成立) |
同一個旗幟參數群組中的旗幟參數,是不能同時設定為成立的。以下是利用I/O物件成員函式setf(旗幟參數)來設定旗幟參數為成立:
(1) 若要設定的旗幟參數有其所屬的旗幟參數群組,那麼:
setf(旗幟參數 , 旗幟參數群組); //設定該旗幟參數為成立,
如:
cout.setf(ios_base::hex,ios_base::basefield);
cout<<62234<<endl; //顯示 f31a
cin.setf(ios_base::hex,ios_base::basefield);
cin>>a; cout<<a; //若輸入為12e3,則顯示12e3
(2) 若要設定的旗幟參數並沒有所屬的旗幟參數群組,那麼:
setf(旗幟參數 ); //設定該旗幟參數為成立,
如:
cout.setf(ios_base::showpoint);
cout<<2.334<<endl; //顯示2.33400
(3) 當旗幟參數設定為成立後,會一直持續。也就是說,接下來的I/O物件的輸入/輸出格式都會以旗幟參數為準。若使用者不想要再以此種格式輸入/輸出,則可將旗幟參數重設或消除。
若旗幟參數有其所屬的旗幟參數群組,則需使用setf(旗幟參數 , 旗幟參數群組);來重設旗幟參數,若沒有其所屬的旗幟參數群組,則使用unsetf(旗幟參數);使旗幟參數恢復為不成立的狀態,如:
cout.setf(ios_base::hex,ios_base::basefield);
cout<<62234<<endl; //顯示 f31a
cout.setf(ios_base::dec,ios_base::basefield);
cout<<62234<<endl; //顯示 62234
又如:
cout.setf(ios_base::showpoint);
cout<<2.334<<endl; //顯示2.33400
cout.unsetf(ios_base::showpoint);
cout<<2.334<<endl; //顯示2.334
留言列表