青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

統(tǒng)計

  • 隨筆 - 50
  • 文章 - 42
  • 評論 - 147
  • 引用 - 0

留言簿(6)

隨筆分類

文章分類

Link

搜索

  •  

積分與排名

  • 積分 - 167517
  • 排名 - 159

最新評論

閱讀排行榜

評論排行榜

C++格式化輸出輸入 (stream)

本文摘自C++primer第四版附錄A3

A.3.3. 控制輸出格式

許多操縱符使我們能夠改變輸出的外觀。有兩大類的輸出控制:控制數(shù)值的表示,以及控制填充符的數(shù)量和布局。

控制布爾值和格式

改變對象格式化狀態(tài)的操縱符的一個例子是 boolalpha 操縱符。默認情況下,將 bool 值顯示為 1 或 0,true 值顯示為 1,而 false 值顯示為 0。可以通過流的 boolalpha 操縱符覆蓋這個格式化:

cout << "default bool values: "
<< true << " " << false
<< "\nalpha bool values: "
<< boolalpha
<< true << " " << false
<< endl;

執(zhí)行時,這段程序產生下面的輸出:

default bool values: 1 0
alpha bool values: true false

一旦將 boolalpha “寫”至 cout,從這個點起就改變了 cout 將怎樣顯示 bool 值,后續(xù)顯示 bool 值的操作將用 truefalse 進行顯示。

要取消 cout 的格式狀態(tài)改變,必須應用 noboolalpha

bool bool_val;
cout << boolalpha // sets internal state of cout
<< bool_val
<< noboolalpha; // resets internal state to default formatting

現(xiàn)在只改變 bool 值的格式化來顯示 bool_val,并且立即將流重置為原來的狀態(tài)。

指定整型值的基數(shù)

默認情況下,用十進制讀寫整型值。通過使用操縱符 hexoctdec,程序員可以將表示進制改為八進制、十六進制或恢復十進制(浮點值的表示不受影響):

const int ival = 15, jval = 1024; // const, so values never change
cout << "default: ival = " << ival
<< " jval = " << jval << endl;
cout << "printed in octal: ival = " << oct << ival
<< " jval = " << jval << endl;
cout << "printed in hexadecimal: ival = " << hex << ival
<< " jval = " << jval << endl;
cout << "printed in decimal: ival = " << dec << ival
<< " jval = " << jval << endl;

編譯和執(zhí)行的時候,程序產生下面的輸出:

default: ival = 15 jval = 1024
printed in octal: ival = 17 jval = 2000
printed in hexadecimal: ival = f jval = 400
printed in decimal: ival = 15 jval = 1024

注意,像 boolalpha 一樣,這些操縱符改變格式狀態(tài)。它們影響緊接在后面的輸出,以及所有后續(xù)的整型輸出,直到通過調用另一操縱符重圍格式為止。

指出輸出的基數(shù)

默認情況下,顯示數(shù)值的時候,不存在關于所用基數(shù)的可見記號。例如,20 是 20,還是 16 的八進制表示?按十進制模式顯示數(shù)值的時候,會按我們期待的格式打印數(shù)值。如果需要打印八進制或十六進制值,可能應該也使用 showbase 操縱符。showbase 操縱符導致輸出流使用的約定,與指定整型常量基數(shù)所用的相同:

  • 以 0x 為前導表示十六進制。

  • 以 0 為前導表示八進制。

  • 沒有任何前導表示十進制。

修改程序使用 showbase 如下:

const int ival = 15, jval = 1024; // const so values never change
cout << showbase; // show base when printing integral values
cout << "default: ival = " << ival
<< " jval = " << jval << endl;
cout << "printed in octal: ival = " << oct << ival
<< " jval = " << jval << endl;
cout << "printed in hexadecimal: ival = " << hex << ival
<< " jval = " << jval << endl;
cout << "printed in decimal: ival = " << dec << ival
<< " jval = " << jval << endl;
cout << noshowbase; // reset state of the stream

修改后的輸出使得基礎值到底是什么很清楚:

default: ival = 15 jval = 1024
printed in octal: ival = 017 jval = 02000
printed in hexadecimal: ival = 0xf jval = 0x400
printed in decimal: ival = 15 jval = 1024

noshowbase 操縱符重置 cout,以便它不再顯示整型值的表示基數(shù)。

默認情況下,十六進制值用帶小寫 x 的小寫形式打印。可以應用 uppercase 操縱符顯示 X 并將十六進制數(shù)字 a - f 顯示為大寫字母。

cout << uppercase << showbase << hex
<< "printed in hexadecimal: ival = " << ival
<< " jval = " << jval << endl
<< nouppercase << endl;

前面的程序產生下面的輸出:

printed in hexadecimal: ival = 0XF jval = 0X400

要恢復小寫,就應用 nouppercase 操縱符。

控制浮點值的格式

對于浮點值的格式化,可以控制下面三個方面:

  • 精度:顯示多少位數(shù)字。

  • 記數(shù)法:用小數(shù)還是科學記法法顯示。

  • 對是整數(shù)的浮點值的小數(shù)點的處理。

默認情況下,使用六位數(shù)字的精度顯示浮點值。如果值沒有小數(shù)部分,則省略小數(shù)點。使用小數(shù)形式還是科學記數(shù)法顯示數(shù)值取決于被顯示的浮點數(shù)的值,標準庫選擇增強數(shù)值可讀性的格式,非常大和非常小的值使用科學記數(shù)法顯示,其他值使用小數(shù)形式。

指定顯示精度

默認情況下,精度控制顯示的數(shù)字總位數(shù)。顯示的時候,將浮點值四舍五入到當前精度。因此,如果當前精度是 4,則 3.14159 成為 3.142;如果精度是 3,打印為 3.14

通過名為 precision 的成員函數(shù),或者通過使用 setprecision 操縱符,可以改變精度。precision 成員是重載的(第 7.8 節(jié)):一個版本接受一個 int 值并將精度設置為那個新值,它返回先前的精度值;另一個版本不接受實參并返回當前精度值。setprecision 操縱符接受一個實參,用來設置精度。

下面的程序說明控制顯示浮點值所用精度的不同方法:

// cout.precision reports current precision value
cout << "Precision: " << cout.precision()
<< ", Value: " << sqrt(2.0) << endl;
// cout.precision(12) asks that 12 digits of precision to be printed
cout.precision(12);
cout << "Precision: " << cout.precision()
<< ", Value: " << sqrt(2.0) << endl;
// alternative way to set precision using setprecision manipulator
cout << setprecision(3);
cout << "Precision: " << cout.precision()
<< ", Value: " << sqrt(2.0) << endl;

編譯并執(zhí)行后,程序產生下面的輸出:

Precision: 6, Value: 1.41421
Precision: 12, Value: 1.41421356237
Precision: 3, Value: 1.41

這個程序調用標準庫中的 sqrt 函數(shù),可以在頭文件 cmath 中找到它。sqrt 函數(shù)量重載的,可以用 floatdoublelong double 實參調用,它返回實參的平方根。


操縱符和其他接受實參的操縱符定義在頭文件 iomanip 中。

控制記數(shù)法

默認情況下,用于顯示浮點值的記數(shù)法取決于數(shù)的大小:如果數(shù)很大或很小,將按科學記數(shù)法顯示,否則,使用固定位數(shù)的小數(shù)。標準庫選擇使得數(shù)容易閱讀的記數(shù)法。


將浮點數(shù)顯示為普通數(shù)(相對于顯示貨幣、百分比,那時我們希望控制值的外觀)的時候,通常最好讓標準庫來選擇使用的記數(shù)法。要強制科學記數(shù)法或固定位數(shù)小數(shù)的一種情況是在顯示表的時候,表中的小數(shù)點應該對齊。

如果希望強制科學記數(shù)法或固定位數(shù)小數(shù)表示,可以通過使用適當?shù)牟倏v符做到這一點:scientific 操縱符將流變?yōu)槭褂每茖W記數(shù)法。像在十六進制值上顯示 x 一樣,也可以通過 uppercase 操縱符控制科學記數(shù)法中的 efixed 操縱符將流為使用固定位數(shù)小數(shù)表示。

這些操縱符改變流精度的默認含義。執(zhí)行 scientificfixed 之后,精度值控制小數(shù)點之后的數(shù)位。默認情況下,精度指定數(shù)字的總位數(shù)——小數(shù)點之前和之后。使用 fixedscientific 命名我們能夠按列對齊來顯示數(shù),這一策略保證小數(shù)點總是在相對于被顯示的小數(shù)部分固定的位置。

恢復浮點值的默認記數(shù)法

與其他操縱符不同,不存在將流恢復為根據(jù)被顯示值選擇記數(shù)法的默認狀態(tài)的操縱符,相反,我們必須調用 unsetf 成員來取消 scientificfixed 所做的改變。要將流恢復為浮點值的默認處理,將名為 floatfield 的標準庫定義值傳給 unsetf 函數(shù):

// reset to default handling for notation
cout.unsetf(ostream::floatfield);

除了取消它們的效果之外,使用這些操縱符像使用任意其他操縱符一樣:

cout << sqrt(2.0) << '\n' << endl;
cout << "scientific: " << scientific << sqrt(2.0) << '\n'
<< "fixed decimal: " << fixed << sqrt(2.0) << "\n\n";
cout << uppercase
<< "scientific: " << scientific << sqrt(2.0) << '\n'
<< "fixed decimal: " << fixed << sqrt(2.0) << endl
<< nouppercase;
// reset to default handling for notation
cout.unsetf(ostream::floatfield);
cout << '\n' << sqrt(2.0) << endl;

產生如下輸出:

1.41421

scientific: 1.414214e+00
fixed decimal: 1.414214

scientific: 1.414214E+00
fixed decimal: 1.414214

1.41421
顯示小數(shù)點

默認情況下,當浮點值的小數(shù)部分為 0 的時候,不顯示小數(shù)點。showpoint 操縱符強制顯示小數(shù)點:

cout << 10.0 << endl;        // prints 10
cout << showpoint << 10.0 // prints 10.0000
<< noshowpoint << endl; // revert to default handling of decimal point

noshowpoint 操縱符恢復默認行為。下一個輸出表達式將具有默認行為,即,如果浮點值小數(shù)部分為 0,就取消小數(shù)點。

填充輸出

按欄顯示數(shù)據(jù)的時候,經常很希望很好地控制數(shù)據(jù)的格式化。標準庫提供下面幾個操縱幫助我們實現(xiàn)需要的控制:

  • setw,指定下一個數(shù)值或字符串的最小間隔。

  • left,左對齊輸出。

    right,右對齊輸出。輸出默認為右對齊。

  • internal,控制負值的符號位置。internal 左對齊符號且右對齊值,用空格填充介于其間的空間。

  • setfill,使我們能夠指定填充輸出時使用的另一個字符。默認情況下,值是空格。


endl 一樣,setw 不改變輸出流的內部狀態(tài),它只決定下一個輸出的長度。

下面程序段說明了這些操縱符:

int i = -16;
double d = 3.14159;
// pad first column to use minimum of 12 positions in the output
cout << "i: " << setw(12) << i << "next col" << '\n'
<< "d: " << setw(12) << d << "next col" << '\n';
// pad first column and left-justify all columns
cout << left
<< "i: " << setw(12) << i << "next col" << '\n'
<< "d: " << setw(12) << d << "next col" << '\n'
<< right; // restore normal justification
// pad first column and right-justify all columns
cout << right
<< "i: " << setw(12) << i << "next col" << '\n'
<< "d: " << setw(12) << d << "next col" << '\n';
// pad first column but put the padding internal to the field
cout << internal
<< "i: " << setw(12) << i << "next col" << '\n'
<< "d: " << setw(12) << d << "next col" << '\n';
// pad first column, using # as the pad character
cout << setfill('#')
<< "i: " << setw(12) << i << "next col" << '\n'
<< "d: " << setw(12) << d << "next col" << '\n'
<< setfill(' '); // restore normal pad character

執(zhí)行時,該程序段產生如下輸出:

i:          -16next col
d: 3.14159next col
i: -16 next col
d: 3.14159 next col
i: -16next col
d: 3.14159next col
i: - 16next col
d: 3.14159next col
i: -#########16next col
d: #####3.14159next col

A.3.4. 控制輸入格式化

默認情況下,輸入操作符忽略空白(空格、制表符、換行符、進紙和回車)。對下面的循環(huán):

while (cin >> ch)
cout << ch;

給定輸入序列

a b   c
d

循環(huán)執(zhí)行四次從字符 a 讀到 d,跳過介于其間的空格、可能的制表符和換行符。該程序段的輸出是:

abcd

noskipws 操縱符導致輸入操作符讀(而不是跳過)空白。要返回默認行為,應用 skipws 操縱符:

cin >> noskipws;      // set cin so that it reads whitespace
while (cin >> ch)
cout << ch;
cin >> skipws; // reset cin to default state so that it discards whitespace

給定與前面相同的輸入,該循環(huán)進行 7 次迭代,讀輸入中的空白以及字符。該循環(huán)產生如下輸出:

a b    c
d

A.3.5. 未格式化的輸入/輸出操作

迄今為止,示例程序中只使用過格式化的 IO 操作。輸入和輸出操作符(<<>>)根據(jù)被處理數(shù)據(jù)的類型格式化所讀寫的數(shù)據(jù)。輸入操作符忽略空白,輸出操作符應用填充、精度等。

標準庫還提供了豐富的支持未格式化 IO 的低級操作,這些操作使我們能夠將流作為未解釋的字節(jié)序列處理,而不是作為數(shù)據(jù)類型(如 charintstring 等)的序列處理。

posted on 2009-05-27 17:53 pear_li 閱讀(1324) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜精品一区二区三区| 欧美日韩久久不卡| 韩国免费一区| 久热成人在线视频| 蜜桃久久精品一区二区| 亚洲激情第一区| 亚洲精品在线观看免费| 国产精品国产三级国产专播精品人 | 久久综合亚州| 女人天堂亚洲aⅴ在线观看| 亚洲精品综合久久中文字幕| 亚洲精品一区二区网址| 国产精品久久久久久久久久久久久 | 国内精品嫩模av私拍在线观看| 久久久久久久999| 美女主播精品视频一二三四| 99视频精品在线| 亚洲免费在线电影| 在线不卡亚洲| 亚洲美女av黄| 国产一区自拍视频| 亚洲精品一区二区三区福利| 国产精品九九久久久久久久| 老司机精品福利视频| 欧美精品一区三区在线观看| 性欧美办公室18xxxxhd| 免费高清在线一区| 新狼窝色av性久久久久久| 久久午夜视频| 羞羞答答国产精品www一本| 久久综合999| 欧美亚洲在线播放| 欧美国产一区二区在线观看| 久久福利电影| 欧美日韩色婷婷| 美日韩精品免费| 国产精品亚洲综合天堂夜夜| 亚洲高清av在线| 国一区二区在线观看| a91a精品视频在线观看| 亚洲国产精品一区二区三区| 亚洲一区二区三区四区视频| 亚洲精品视频免费在线观看| 性欧美暴力猛交69hd| 亚洲图片激情小说| 欧美国产另类| 欧美高清在线一区二区| 国产一级揄自揄精品视频| 一区二区三区鲁丝不卡| 日韩视频中午一区| 久久中文字幕一区| 久久夜色精品国产欧美乱| 国产精品一国产精品k频道56| 亚洲国产日韩在线一区模特| 在线观看精品视频| 久久狠狠婷婷| 久久精品夜色噜噜亚洲a∨| 国产精品最新自拍| 亚洲免费视频网站| 午夜电影亚洲| 国产精品嫩草影院一区二区| 亚洲免费av网站| 夜久久久久久| 欧美日韩一卡二卡| 亚洲伦理在线观看| 亚洲婷婷综合色高清在线| 欧美日韩免费一区二区三区视频 | 香蕉久久国产| 国产精品少妇自拍| 香蕉久久夜色精品国产| 欧美在线影院在线视频| 国产日韩在线看| 久久国产精品一区二区三区四区| 欧美在线观看视频| 国产一区二区三区奇米久涩| 久久成人精品| 欧美福利电影在线观看| 亚洲欧洲日产国产网站| 欧美日韩a区| 亚洲香蕉成视频在线观看| 午夜免费日韩视频| 狠狠色噜噜狠狠色综合久| 久久精品一区| 亚洲国产91精品在线观看| 最新成人在线| 欧美午夜国产| 欧美在线综合| 亚洲高清色综合| 亚洲一区二区三区精品在线观看| 国产精品视频网| 久久久噜噜噜久久| 91久久在线观看| 午夜精品影院| 亚洲国产mv| 国产精品户外野外| 久久精品国产91精品亚洲| 亚洲娇小video精品| 亚洲欧美在线x视频| 影音先锋久久| 欧美午夜免费电影| 久久频这里精品99香蕉| 日韩西西人体444www| 久久亚洲精品网站| 亚洲一区二区精品在线| 樱花yy私人影院亚洲| 欧美日韩视频在线| 久久精品国产清高在天天线| 亚洲精品影视| 欧美jizz19hd性欧美| 午夜精品久久久久久久蜜桃app| 亚洲高清在线播放| 国产精品午夜国产小视频| 欧美大胆成人| 久久久一二三| 亚洲欧美国产日韩天堂区| 亚洲欧洲日韩在线| 老牛影视一区二区三区| 午夜国产不卡在线观看视频| 亚洲精品在线三区| 极品裸体白嫩激情啪啪国产精品| 欧美视频一区| 欧美另类综合| 你懂的网址国产 欧美| 久久爱另类一区二区小说| 这里只有视频精品| 亚洲精选视频免费看| 亚洲电影在线免费观看| 久久综合激情| 久久久另类综合| 欧美在线视频一区二区三区| 亚洲一区二区三区777| 亚洲美女91| 亚洲狼人精品一区二区三区| 伊人久久综合| 激情综合久久| 国产在线视频不卡二| 国产精品永久免费在线| 国产精品国产精品| 国产精品国码视频| 国产精品成av人在线视午夜片| 欧美日本视频在线| 欧美精品1区2区| 欧美精选午夜久久久乱码6080| 久久综合色播五月| 老司机精品福利视频| 久久久不卡网国产精品一区| 久久成人羞羞网站| 久久天天躁狠狠躁夜夜爽蜜月| 久久本道综合色狠狠五月| 久久精品国产亚洲5555| 可以看av的网站久久看| 免费成人美女女| 欧美金8天国| 欧美日韩中文字幕在线视频| 欧美日韩一区二区在线| 国产精品入口日韩视频大尺度| 国产精品拍天天在线| 国产尤物精品| 91久久精品国产91久久性色tv | 国产精品va在线| 国产精品久久久久久久7电影 | 国产精品视频福利| 国产在线不卡| 亚洲精品午夜精品| 国产精品99久久久久久久久久久久| 亚洲午夜日本在线观看| 欧美亚洲视频| 欧美 日韩 国产精品免费观看| 亚洲第一页在线| 在线亚洲精品| 久久亚洲综合| 欧美三区在线视频| 狠狠爱www人成狠狠爱综合网| 亚洲黄色大片| 欧美一区二区福利在线| 欧美成人伊人久久综合网| 99视频在线精品国自产拍免费观看| 亚洲色在线视频| 久久在线观看视频| 国产精品欧美日韩一区二区| 亚洲大胆人体视频| 亚洲一区二区三区欧美| 美女啪啪无遮挡免费久久网站| 亚洲美女视频在线免费观看| 午夜天堂精品久久久久| 欧美激情精品久久久久久蜜臀 | 牛人盗摄一区二区三区视频| 国产精品久久久对白| 亚洲高清视频一区| 先锋影音久久久| 亚洲国产精品免费| 欧美一二三区精品| 欧美色网一区二区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 在线亚洲一区| 欧美国产激情二区三区| 午夜在线电影亚洲一区| 欧美色视频日本高清在线观看| 一区精品在线播放| 欧美一级午夜免费电影|