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自己學習,然後融入自己的理解並與大家分享。 大師的書當然好,但是具體到每個人不一定一下子都能夠理解。通過作者的文章,大家可以在學習,理解的過程中哪怕