格式標誌可以控制輸入輸出的格式,比如是否在正數前加+號,用八進位制、十進位制、十六進製制來顯示資料等。
以下是訪問格式標誌的成員函式(定義在ios_base類中)
成員函式
意義setf(flags)
增加標誌,返回修改前的所有標誌
setf(flags, mask)
增加標誌,mask引數存放的標誌則被清除,返回修改前的所有標誌
unsetf(flags)
清除標誌
flags()
返回當前所有標誌
flags(flags)
將flags設為新的格式標誌,返回修改前的所有標誌
copyfmt(stream)
從stream中複製所有格式定義
說明:
setf(flags, mask)
舉例:std::cout.sef( std::ios::hex, std::ios::basefield);
其中標誌位ios::basefield是hex|oct|dec三個標誌的組合,其它標誌位定義參考如下,
static
const _fmtflags skipws = (_fmtflags)_iosskipws;
static
const _fmtflags unitbuf = (_fmtflags)_iosunitbuf;
static
const _fmtflags uppercase = (_fmtflags)_iosuppercase;
static
const _fmtflags showbase = (_fmtflags)_iosshowbase;
static
const _fmtflags showpoint = (_fmtflags)_iosshowpoint;
static
const _fmtflags showpos = (_fmtflags)_iosshowpos;
static
const _fmtflags left = (_fmtflags)_iosleft;
static
const _fmtflags right = (_fmtflags)_iosright;
static
const _fmtflags internal = (_fmtflags)_iosinternal;
static
const _fmtflags dec = (_fmtflags)_iosdec;
static
const _fmtflags oct = (_fmtflags)_iosoct;
static
const _fmtflags hex = (_fmtflags)_ioshex;
static
const _fmtflags scientific = (_fmtflags)_iosscientific;
static
const _fmtflags fixed = (_fmtflags)_iosfixed;
static
const _fmtflags boolalpha = (_fmtflags)_iosboolalpha;
static
const _fmtflags _stdio = (_fmtflags)_ios_stdio;
static
const _fmtflags adjustfield = (_fmtflags)(_iosleft
| _iosright | _iosinternal);
static
const _fmtflags basefield = (_fmtflags)(_iosdec
| _iosoct | _ioshex);
static
const _fmtflags floatfield = (_fmtflags)(_iosscientific
| _iosfixed);
為了與io操作符<<、>>配合使用,實現了以下兩個操控器(帶引數)來設定格式標誌
操控器意義
std::setiosflags(flags)
將flags設為格式標誌(呼叫setf(flags) )
std::resetiosflags(mask)
清除mask所標識的一組標誌(呼叫setf(0, mask) )
例如:
cout << std::resetiosflags( ios::basefield ) << std::setiosflags( ios::hex ) << 15 << endl;
輸出: f
由標誌boolalpha
來控制,若設定了此標誌,便以文字表示,否則又資料表示,預設的未被設立。注:此標誌被設立,就一直生效,除非清除此標誌
為了與操作符<<、>>配合使用,實現了以下操控器
操控器意義
std::boolalpha
設立標誌ios::boolalpha
std::noboolalpha
清除標誌ios::boolalpha
例如以下
cout
<< std::boolalpha << true
<< endl;
cout
<< false
<< endl;
輸出的為:
true
false
字段寬度、填充字元由成員函式控制,位置對齊方式則由格式標誌來控制。
成員函式
意義width()
返回當前字元寬度
width(val)
設定當前字元寬度,並返回先前的字元寬度
fill()
返回當前填充字元
fill(c)
設定當前填充字元,並返回先前填充字元
以上**中,函式width
呼叫後的作用為一次性的,即執行了任意格式化io操作後,就會恢復width的值為預設狀態。而fill設定的則一直生效,除非重新設定。例如:
//以^符號填充
cout.fill( '^' );
cout.width( 4 );
cout
<< 1
<< endl;
//恢復預設width
cout
<< 1
<< endl;
位置對齊格式標誌如下:
掩碼標誌
意義ios::adjustfield
ios::left
左對齊ios::right
右對齊ios::internal
符號靠左對齊,數值靠右對齊
none
右對齊(預設)
同樣,也提供了對應的操控器
由格式標誌: ios::showpos、ios::uppercase來控制。ios::showpos被設定了,則在正數前顯示+號,ios::uppercase標誌被設定了,則針對十六進製制、科學記號等的字母就以大寫的格式輸出,對字串是不會有影響的。
同樣,也提供了對應的操控器
注:此兩個標誌被設立,就一直生效,除非清除此標誌
由格式標誌控制
同樣的,也有相應的操作器
注:此四個標誌被設立,就一直生效,除非清除此標誌
浮點數表示由格式標誌控制
精度控制成員函式
對應操控器
注:以上標誌被設立,就一直生效,除非清除此標誌,精度被設定,也一樣
格式標誌
操控器注:以上標誌被設立,就一直生效,除非清除此標誌
ios_base類定義了數個成員函式來支援國際化
以下演示std::noskipws
的用法:
//此處若輸入(_表空格):_1space
//則啥也不輸出,因為》讀取字串時是以空格來判斷是否結束的
//第乙個空格沒被跳過,表示結束讀取,因為啥也沒讀到,流被設定讀取失敗
std::string strtemp;
std::cin >> std::noskipws;
while( cin >> strtemp )
//此處會乙個字元乙個字元的讀取,空格也會被讀取
//若輸入: _a_b
//則輸出:
//_//a
//_//b
char c;
cin >> std::noskipws;
while( cin >> c )
cout
<< c << endl;
}
2 1格式化輸出
註解的三種方式 1.之後的這一行全為註解 2.之間的內容全是 可以換行 3.後一行都是 這是xml註解 之後會轉換乙個xml檔案 無效表示符 for 關鍵字 3q 不能是數字開頭 count 不可以 可以 console.write 中間不能有.號 ture false 都是給bool布林值 預設為...
(11)格式化輸出
這個模擬較重要,用於格式化翻譯,因為單詞對應的翻譯比較大,有一些例句有幾十條,如果不格式化,返回的講是一大坨,一大坨的,使用者體驗不好 經過這個類的格式化之後,返回的就是一條一條的例句,而不是一大堆 格式化翻譯 class formattrans public function gettrans s...
2 格式化輸出
format 格式化文字並返回結果到字串 print 輸出格式化文字到控制台 println 輸出格式化文字到控制台,並在行尾自動加換行 檔案,format.rc fn main world println hello println hello format println hello this ...