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

C++輸出格式控制

http://www.cnblogs.com/leewiki/archive/2011/12/13/2286168.html  轉載與此部落格

setprecision(n)可控制輸出流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6,所以不管資料是多少,都只輸出六位。如果setprecision(n)與setiosflags(ios::fixed)或者setiosflags(ios_base::fixed)合用,可以控制小數點右邊的數字個數。setiosflags(ios::fixed)是用定點方式表示實數。 如果與setiosnags(ios::scientific)合用,可以控制指數表示法的小數位數。setiosflags(ios::scientific)是用指數方式表示實數。

I/O流常用控制符:

使用控制符時,在程式開頭加投檔案#include <iomanip> C++有兩種方法控制格式輸出:1、用格式控制符;2、用流物件的成員函式 格式控制符:

dec                                 設定基數為10

hex                                 設定基數為16

oct                                 設定基數為8

setfill(c)                          設定填充字元c

setprecision(n)                     設定顯示小數精度為n位

setw(n)                             設定域寬為n個字元

setiosflags(ios::fixed)             固定的浮點顯示

 setiosflags(ios::scientific)        指數表示

setiosflags(ios::left)              左對齊

setiosflags(ios::right)             右對齊

setiosflags(ios::skipws)            忽略前導空白

setiosflags(ios::uppercase)         16進位制數大寫輸出

setiosflags(ios::lowercase)         16進位制小寫輸出

成員函式:

flags(10)                           設定基數為10

flags(16)                           設定基數為16

flags(8)                            設定基數為8

flags(c)                            設定填充字元c

precision(n)                        設定顯示小數精度為n位

width(n)                            設定域寬為n個字元

 在新版本的c++中標頭檔案已經用iomanip取代了iomanip.h。

  以下是一些常用的函式:

  dec 置基數為10 相當於"%d"

  hex 置基數為16 相當於"%X"

  oct 置基數為8 相當於"%o"

  setfill(c) 設填充字元為c

  setprecision(n) 設顯示小數精度為n位

  setw(n) 設域寬為n個字元

  setiosflags(ios::fixed) 固定的浮點顯示

  setiosflags(ios::scientific) 指數表示

  setiosflags(ios::left) 左對齊

  setiosflags(ios::right) 右對齊

  setiosflags(ios::skipws 忽略前導空白

  setiosflags(ios::uppercase) 16進位制數大寫輸出

  setiosflags(ios::lowercase) 16進位制小寫輸出

  setiosflags(ios::showpoint) 強制顯示小數點

  setiosflags(ios::showpos) 強制顯示符號

上面的內容我自己測試一些程式碼,不全,但是這個格式太多了,以後用到再來看看。

複製程式碼
 1 #include <iostream>
 2 #include <iomanip>
 3 using namespace std;
 4 int main ()
 5 {
 6     double a=123456.343001;
 7     cout<<"a的值為123456.343001"<<endl<<endl; 
 8     cout<<"不做任何操作,預設情況下只顯示6六位資料:"<<a<<endl<<endl;
 9     cout<<"指定10位小數且為浮點數表示setiosflags(ios::fixed):"<<setiosflags(ios::fixed)<<setprecision(10)<<a<<endl<<endl;
10     cout<<"指定為10位小數且為指數形式表示setiosflags(ios::scientific),就是留下有效位:如何指定的有效位超過本來的有效位,其輸出就是本身的位數:"<<setiosflags(ios::scientific)<<setprecision(12)<<a<<endl<<endl;
11     cout<<"指定為10位小數且為指數形式表示setiosflags(ios::scientific),就是留下有效位:setprecision(10)指定留下10位有效位"<<setiosflags(ios::scientific)<<setprecision(10)<<a<<endl<<endl;
12     cout<<"左對齊:"<<setiosflags(ios::left)<<setprecision(20)<<a<<endl<<endl;
13     cout<<"右對齊:"<<setiosflags(ios::right)<<setprecision(20)<<a<<endl<<endl;
14     system("pause");
15     return 0;
16 }
複製程式碼

下面是轉載別人的,看別人弄得挺細,覺得挺好,就弄過來了。上面的內容也是一個網站看些弄出來的。

可以不使用#include<iomanip>的

cout.precision()設定小數點後精確度,

cout.width()設定寬度,

cout.setf()設定顯示格式,比如

cout.setf(ios::left)左對齊

cout.setf(ios::showpoint)不管是否有小數位,顯示小數點

cout.fill();不足寬度則填充,如cout.fill('0');

如這次周賽1002,如果使用COUT在輸出前要這樣設定一下。

cout.precision(6);

cout.width(8);

cout.setf(ios::left);

cout.setf(ios::showpoint);

cout.fill('0');

僅僅cout.precision(6)和cout.setf(ios::showpoint)時,不知何原因如果為0只顯示到小

數點後5位,所以為了在最後加個0,要加上其它3項補充(部分是iomanip裡的):

long flags( ) const 返回當前的格式標誌。

long flays(long newflag) 設定格式標誌為newflag,返回舊的格式標誌。

long setf(long bits) 設定指定的格式標誌位,返回舊的格式標誌。

long setf(long bits,long field)將field指定的格式標誌位置為bits,返回舊的格式標誌

long unsetf(long bits) 清除bits指定的格式標誌位,返回舊的格式標誌。

long fill(char c) 設定填充字元,預設條件下是空格。

char fill( ) 返回當前填充字元。

int precision(int val) 設定精確度為val,控制輸出浮點數的有效位,返回舊值。

int precision( ) 返回舊的精確度值。

int width(int val) 設定顯示資料的寬度(域寬),返回舊的域寬。

int width( )只返回當前域寬,預設寬度為0。這時插入操作能按表示資料的最小寬度顯示

資料

dec 十進位制的輸入輸出

hex 十六進位制的輸入輸出

oct 八進位制的輸入輸出

例如用cout<<hex<<i<<endl; 即可以讓變數i以16進位制的格式輸出。

ws 提取空白字元

flush 重新整理流

resetiosflags(long) 請除特定的格式標誌位

setiosflags(long) 設定特定的格式標誌位

setfill(char) 設定填充字元

setprecision(int) 設定輸出浮點數的精確度

setw(int) 設定域寬格式變數

一:標準輸入函式cin 不知道說它是個函式對還是不對,它是代表標準的輸入裝置--鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是:cin>>變數;

小小的說明一下,輸入多個變數可以寫在一行,如:cin>>x>>y>>z; 這樣寫不是不允許,而是不好看,如果是不同的變數型別,那就更是沒頭沒腦了。除了你,人家是不知道該輸入什麼的

,所以,一般在輸入語句的前面,我們一般都 要做一個提示,請輸入×××,讓人家心裡有個底,知道這個變數是做什麼的。 另外,這個函式是不用帶地址符號"&"的,也不用寫明變數型別,千萬不要跟scanf混淆。當然他就也不檢查變數輸入是否合法。如:

int i; cout<<"please input a number:" cin>>i; cout<<"i="<<i<<endl;

如果你輸入的是一個字元如'a'那麼他也不檢查,但你輸出的結果不是正確的,這要是手工進行檢查。當然他也跟scanf一樣,如果在迴圈內部輸入不合法的變數值,那麼也將陷入死迴圈。如下:

1 /*一個輸入不合法變數陷入死迴圈的例子*/ #include <iostream.h> main() { int i; while(i!=-1) { cout<<"i=" cin>>i; /*請輸入不是一個字元如'a'試試*/ cout<<endl; } }

如上一個程式,如果你輸入的不合法,那就將陷入死迴圈。解決的辦法有個一,把cin>>i;語句移到判斷迴圈的語句中,那麼,你輸入的如果是不合法的變數,他將跳出迴圈。 cin是用空格來分隔輸入的。請看看如下的例子:

/*一個空格分隔使輸入的變數達不到希望的值*/ #include <iostream.h> main() { char str[20]; cout<<"please input a string:"; cin>>str; /*你試著輸入"hello word"*/ cout<<endl<<"str="<<str; }

看得到是什麼結果呢?得到的僅僅是str=hello,為什麼呢?因為cin是以空格為分隔的,當你輸入一個空格時,那他就認為後面的輸入不屬於這裡了, 認為應該給後面的變量了。另外,當你輸入的字串大於分配的空間時,還會出現溢位現象。當然,還有整行輸入的函式,包括空格也一起輸入了,以後也會學到。

二、標準輸出函式cout 說cout是函式,也跟cin一樣,不知道對不對。他代表的是標準輸出裝置--顯示器。其實前面已經用過很多次這個函數了。我們就通過一個例子來進行格式化的輸出就是了,大家就體會體會這個例子就行了,比printf靈活了很多。 首先,我們可以按16進位制,8進位制和10進位制來顯示我們的資料,如下:

View Code

我們用cout.setf()設定輸出的格式,用cout.unsetf()取消格式。可以看出10進位制在輸出的時候不管有沒有設定基指示

符ios:: showbase,都沒用,8進位制再輸出的時候在前面加0,而16進位制是在前面加0X。而對於數值中字母大寫輸出,只對16進位制

有用,以後我們就應該看情 況使用了。當然,我們前面已經說了,還有一種方法也可以實現格式化輸出,那就是使用操縱運算元,如下,

複製程式碼
 1 /*一個按進位制輸出的例子*/
 2 #include<iomanip.h>
 3 void main()
 4 {
 5 int x=30, y=300, z=1024;
 6 cout<<x<<' '<<y<<' '<<z<<endl; //按十進位制輸出 7 cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八進位制輸出 8 cout<<setiosflags(ios::showbase); //設定基指示符 9 cout<<x<<' '<<y<<' '<<z<<endl; //仍按八進位制輸出10 cout<<resetiosflags(ios::showbase); //取消基指示符11 cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六進位制輸出12 cout<<setiosflags(ios::showbase | ios::uppercase);
13 //設定基指示符和數值中的字母大寫輸出,14 cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進位制輸出15 cout<<resetiosflags(ios::showbase | ios::uppercase);
16 //取消基指示符和數值中的字母大寫輸出17 cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進位制輸出18 cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十進位制輸出19 }
複製程式碼

我們用以上的程式也可以輸出同樣的結果,可見他的靈活。我們現在輸出下列一段文字:

第一章

1.1 什麼是C語言...........................1

1.11 C語言的歷史..........................58

第二章

方法很多種啦,我們可以這樣寫:

複製程式碼
 1 /*一個使用填充,寬度,對齊方式的例子*/
 2 #include <iostream.h>
 3 void main()
 4 {
 5 cout<<"第一章"<<endl;
 6 cout<<" ";
 7 cout.setf(ios::left); //設定對齊方式為left 8 cout.width(7); //設定寬度為7,不足用空格填充 9 cout<<"1.1";
10 cout<<"什麼是C語言";
11 cout.unsetf(ios::left); //取消對齊方式,用預設right方式12 cout.fill('.'); //設定填充方式13 cout.width(30); //設定寬度,只對下條輸出有用14 cout<<1<<endl;
15 cout<<" ";
16 cout.width(7); //設定寬度17 cout.setf(ios::left); //設定對齊方式為left18 cout.fill(' '); //設定填充,預設為空格19 cout<<"1.11";
20 cout<<"C語言的歷史";
21 cout.unsetf(ios::left); //取消對齊方式22 cout.fill('.');
23 cout.width(30);
24 cout<<58<<endl;
25 cout.fill(' ');
26 cout<<"第二章"<<endl;
27 }
複製程式碼

我們多次設定了寬度,為的是使我們的間距能一致,也使用了對齊方式,為的是使我們的資料能對齊顯示,看起來美觀

。我們還使用了填充方式。我們下面用操縱運算元來實現也是可以的。

複製程式碼
 1 /*一個使用填充,寬度,對齊方式的例子*/
 2 #include <iomanip.h>
 3 void main()
 4 {
 5 cout<<"第一章"<<endl;
 6 cout<<" ";
 7 cout<<setiosflags(ios::left)<<setw(7); //設定寬度為7,left對齊方式 8 cout<<"1.1";
 9 cout<<"什麼是C語言";
10 cout<<resetiosflags(ios::left); //取消對齊方式11 cout<<setfill('.')<<setw(30)<<1<<endl; //寬度為30,填充為'.'輸出12 cout<<setfill(' '); //恢復填充為空格13 cout<<" ";
14 cout<<setw(7)<<setiosflags(ios::left); //設定寬度為7,left對齊方式15 cout<<"1.11";
16 cout<<"C語言的歷史";
17 cout<<resetiosflags(ios::left); //取消對齊方式18 cout<<setfill('.')<<setw(30)<<58<<endl; //寬度為30,填充為'.'輸出19 cout<<setfill(' ')<<"第二章"<<endl;
20 }
複製程式碼

 我們輸出了同樣的效果,不過依我的性格,我更喜歡用操縱運算元來進行格式化輸出。最後我們看看浮點數的格式輸出,

如下例:

複製程式碼
 1 /*關於浮點數的格式*/
 2 #include <iostream.h>
 3 void main()
 4 {
 5 float f=2.0/3.0,f1=0.000000001,f2=-9.9;
 6 cout<<f<<' '<<f1<<' '<<f2<<endl; //正常輸出 7 cout.setf(ios::showpos); //強制在正數前加+號 8 cout<<f<<' '<<f1<<' '<<f2<<endl;
 9 cout.unsetf(ios::showpos); //取消正數前加+號10 cout.setf(ios::showpoint); //強制顯示小數點後的無效011 cout<<f<<' '<<f1<<' '<<f2<<endl;
12 cout.unsetf(ios::showpoint); //取消顯示小數點後的無效013 cout.setf(ios::scientific); //科學記數法14 cout<<f<<' '<<f1<<' '<<f2<<endl;
15 cout.unsetf(ios::scientific); //取消科學記數法16 cout.setf(ios::fixed); //按點輸出顯示17 cout<<f<<' '<<f1<<' '<<f2<<endl;
18 cout.unsetf(ios::fixed); //取消按點輸出顯示19 cout.precision(18); //精度為18,正常為620 cout<<f<<' '<<f1<<' '<<f2<<endl;
21 cout.precision(6); //精度恢復為622 }
複製程式碼

同樣,我們也一樣能用操縱運算元實現同樣的功能:

複製程式碼
 1 /*關於浮點數的格式*/
 2 #include <iomanip.h>
 3 void main()
 4 {
 5 float f=2.0/3.0,f1=0.000000001,f2=-9.9;
 6 cout<<f<<' '<<f1<<' '<<f2<<endl; //正常輸出 7 cout<<setiosflags(ios::showpos); //強制在正數前加+號 8 cout<<f<<' '<<f1<<' '<<f2<<endl;
 9 cout<<resetiosflags(ios::showpos); //取消正數前加+號10 cout<<setiosflags(ios::showpoint); //強制顯示小數點後的無效011 cout<<f<<' '<<f1<<' '<<f2<<endl;
12 cout<<resetiosflags(ios::showpoint); //取消顯示小數點後的無效013 cout<<setiosflags(ios::scientific); //科學記數法14 cout<<f<<' '<<f1<<' '<<f2<<endl;
15 cout<<resetiosflags(ios::scientific); //取消科學記數法16 cout<<setiosflags(ios::fixed); //按點輸出顯示17 cout<<f<<' '<<f1<<
            
           

相關推薦

C++格式化輸出C++輸出格式控制

在輸出資料時,為簡便起見,往往不指定輸出的格式,由系統根據資料的型別採取預設的格式,但有時希望資料按指定的格式輸出,如要求以十六進位制或八進位制形式輸出一個 整數,對輸出的小數只保留兩位小數等。有兩種方法可以達到此目的。一種是我們已經介紹過的使用控制符的方法(詳情請檢視:C

C++輸出格式控制

http://www.cnblogs.com/leewiki/archive/2011/12/13/2286168.html  轉載與此部落格 setprecision(n)可控制輸出流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6,所以不管資料是多少,都只輸

C++標準輸入輸出格式控制(進位制)

從HDU--2057題說起 剛開始做,以為這題是大數加減問題,試了半天發現太複雜,要考慮的因素太多,後來知道long long能表示16位十六進位制的整數,題目中為15位,可以直接加減,百度了一下輸入輸出十六進位制的格式,還有十六進位制的負數輸出的是其補碼,故要判斷結果

C++輸入輸出格式控制

1、數的進位制 預設進位制: 預設狀態下,資料按十進位制輸入輸出。如果要求按八進位制或十六進位制輸入輸出,在cin或cout中必須指明相應的資料形式,oct為八進位制,hex為十六進位制,dec為十進位制。 int i, j, k, l; cout<<”Inp

C/C++標準輸入輸出格式控制

1、c語言輸入輸出格式控制 (1)輸入格式控制–scanf() 語法: #include <stdio.h> int scanf( const char *format, ... ); scanf()函式根據由format(格式)指定的

python視覺化演算法執行進度(含輸出格式控制函式format用法)

使用PyPrind包實現演算法的進度條功能 在演算法執行過程中,使用PyPrind建立一個進度條物件,視覺化演算法的執行進度 官方地址:https://github.com/rasbt/pyprind 可以支援多種不同樣式的進度條顯示。 import pyprind import

Log4j輸出格式控制--log4j的PatternLayout引數含義

引數 說明 例子 %c 列出logger名字空間的全稱,如果加上{<層數>}表示列出從最內層算起的指定層數的名字空間 log4j配置檔案引數舉例 輸出顯示媒介 假設當前l

Shell echo-使用echo實現更復雜的輸出格式控制

語法 Shell 的 echo 指令是用於字串的輸出。命令格式: echo string 當然也可以使用echo實現更復雜的輸出格式控制。 複雜輸出格式 1.顯示普通字串 echo "It is a test" 這裡的雙引號完全可以

Log4j輸出格式控制--log4j的PatternLayout引數含義以及詳細配置

log4j.properties 使用 一.引數意義說明 輸出級別的種類 ERROR、WARN、INFO、DEBUG ERROR 為嚴重錯誤 主要是程式的錯誤 WARN 為一般警告,比如session丟失 INFO 為一般要顯示的資訊,比如登入登出 DEBUG 為程式的除錯資訊 配置日誌資訊輸出目的地 log

輸出格式控制setfill和setw使用

 注意問題: 所使用的標頭檔案為iomanip.h 例如:cout<<'s'<<setw(8)<<'a'<<endl; 則在螢幕顯示 s        a  //s與a之間有7個空格,setw()只對其後面緊跟的輸出產生

c# xml 輸出註釋格式控制

-1 dev eat gin idm 好的 alt mono 最大 string str="\n\t///*! 妝容類物品子分類 */\n\tenum MakeupSubType\n\t{\n\t\tItem_InvalidMakeupSubType = -1,\t\t\t

C++ 的 printf格式控制輸出

測試平臺:gcc (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5 %f,預設輸出六位小數(對float和double型別都是預設輸出六位小數),有效數字只是前6位(包括整

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

》預設的輸入輸出格式         在沒有特地進行格式控制的情況下,輸入輸出採用預設格式。         >預設的輸入格式         C++流所識別的輸入資料的型別及其預設的輸入格式:               # short   、int    、lon

c語言中輸入輸出格式控制

一、輸入格式的控制 scanf函式中格式字元: (1)d,i:用來輸入有符號的十進位制中 (2) u:用來輸入無符號的十進位制整數 (3)o:用來輸入無符號的八進位制整數 (4)x,X:用來輸入無符號的十六進位制整數(大小寫作用相同) (5)c:用來輸入單個符號  (6)

C++控制輸出格式

轉自百度知道@何度千尋的回答 #include <iostream> #include <iomanip>//不要忘記包含此標頭檔案 using namespace std; int main() {   int a;   cout<<

c++ 輸出文件編碼控制

ofstream 編碼 ring 輸入 ++ 控制 stream ifs bsp c++ 讀寫文件需要包含fstream頭文件。 讀文件聲明形如: ifstream fin("路徑");寫文件聲明形如:ofstream fout("路徑");讀文件時可以采用getline

C語言輸出格式總結

輸出 無符號 分享 字符串 image 輸出字符串 轉義 輸出符 連續 1 一般格式 printf(格式控制,輸出表列) 例如:printf("i=%d,ch=%c\n",i,ch); 說明: (1)“格式控制”是用雙撇號括起來的字符串,也稱“轉換控

C語言的一些輸出格式

print 科學 數據 相同 無符號整數 col 16進制 大於 mic %e printf()的一種輸出格式  科學表示的一種浮點數  1.24==1.240000e+000 1240000==1.240000e+006

函數中{}輸出格式詳解(C#)

with content c-s sort 命名方式 發現 1-1 原始的 des Console.WriteLine()函數中{}輸出格式詳解(C#) Console.WriteLine()函數的格式一直沒怎麽註意。今天同事問起Console.WriteLine({0

C++11新特性(76)-浮點數格式控制(Floating Format Control)

前幾篇文章中的某一篇,有一個讀者回復,說我文章的內容C++ Primer上都有。確實是這樣。作者寫作本連載的的目的,首先是參照C++Primer自己學習,然後融入自己的理解並與大家分享。 大師的書當然好,但是具體到每個人不一定一下子都能夠理解。通過作者的文章,大家可以在學習,理解的過程中哪怕