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


在輸出浮點數時,C++默認的流輸出數值有效位是6,所以不管數據是多少都只輸出六位有效數字。可以采用setprecision(n)來控制輸出流顯示浮點數的數字個數。

I/O流常用控制符:

使用控制符時,需要加入頭文件#include<iomanip>。C++有兩種方法控制格式輸出:1、用格式控制符;2、用流對象的成員函數。

使用格式控制符:

控制符 作用
dec 設置整數的基數為10
hex 設置整數的基數為16
oct 設置整數的基數為8
setbase(n) 設置整數的基數為n,其中n的取值為8,10,16
setfill(c) 設置填充字符,c可以是字符常量或字符變量
setprecision(n) 設置實數的精度為n位。在以一般十進制形式輸出時,n代表有效數字。在以fixed(固定小數位)形式和scientific(指數)形式輸出時,n為小數位數。
setw(n) 設置字段寬度
setiosflags(ios::fixed) 設置浮點數以固定的小數位數顯示。
setiosflags(ios::scientific) 設置浮點數以科學計數法(即指數形式)顯示。
setiosflags(ios::left) 輸出數據左對齊。
setiosflags(ios::right) 輸出數據右對齊。
setiosflags(ios::shipws) 忽略前導的空格。
setiosflags(ios::uppercase) 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。
setiosflags(ios::showpos) 輸出正數時,給出“+”號
resetiosflags 終止已設置的輸出格式狀態,在括號中應指定內容。

成員函數:

 

流成員函數 與之作用相同的控制符 作用
precision(n) setprecision(n) 設置實 數的精度為n位。
width(n) setw(n) 設置字段寬度為n位。
fill(c) setfill(c) 設置填充字符c。
setf( ) setiosflags( ) 設置輸出格式狀態,括號中應給出格式狀態,內容與控制符setiosflags括號中內容相同。
ubsetf( ) resetiosflags( ) 終止已設置的輸出格式狀態。

dec 置基數為10 相當於"%d";hex 置基數為16 相當於"%X";oct 置基數為8 相當於"%o"。

設置格式狀態的格式標志:

格式標志 作用
ios::left 輸出數據在本域寬范 圍內左對齊
ios::right 輸出數據在本域寬范圍內右對齊
ios::internal 數值的符號位在域寬內左對齊,數值右對齊,中間由填充字符填充
ios::dec 設置整數的基數為10
ios::oct 設置整數的基數為8
ios::hex 設置整數的基數為16
ios::showbase 強制輸出整數的基數(八進制以0打頭,十六進制以0x打頭)
ios::showpoint 強制輸出浮點數的小點和尾數0
ios::uppercase 在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示
ios::showpos 輸出正數時,給出“+”號。
ios::scientific 設置浮點數以科學計數法(即指數形式)顯示
ios::fixed 設置浮點數以固定的小數位數顯示
ios::unitbuf 每次輸出后刷新所有流
ios::stdio 每次輸出后清除 stdout,stderr

測試1:一個按進制輸出的例子(成員函數實現)

int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
cout.setf(ios::showbase | ios::uppercase); //設置基指示符輸出和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符輸出和數值中的字母大寫輸出
cout.setf(ios::oct); //設置為八進制輸出,此設置不取消一直有效
cout<<x<<' '<<y<<' '<<z<<endl; //按八進制輸出
cout.setf(ios::showbase | ios::uppercase); //設置基指示符輸出和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符輸出和數值中的字母大寫輸出
cout.unsetf(ios::oct); //取消八進制輸出設置,恢復按十進制輸出
cout.setf(ios::hex); //設置為十六進制輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.setf(ios::showbase | ios::uppercase); //設置基指示符輸出和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl;
cout.unsetf(ios::showbase | ios::uppercase); //取消基指示符輸出和數值中的字母大寫輸出
cout.unsetf(ios::hex); //取消十六進制輸出設置,恢復按十進制輸出
cout<<x<<' '<<y<<' '<<z<<endl;
View Code

測試2:一個按進制輸出的例子(操作控制符實現)

#include<iomanip.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八進制輸出
cout<<setiosflags(ios::showbase); //設置基指示符
cout<<x<<' '<<y<<' '<<z<<endl; //仍按八進制輸出
cout<<resetiosflags(ios::showbase); //取消基指示符
cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六進制輸出
cout<<setiosflags(ios::showbase | ios::uppercase);
//設置基指示符和數值中的字母大寫輸出,
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出
cout<<resetiosflags(ios::showbase | ios::uppercase);
//取消基指示符和數值中的字母大寫輸出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六進制輸出
cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十進制輸出
}
View Code

測試3:打印如下格式的一段文字

第一章

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

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

第二章

#include <iostream.h>
void main()
{
cout<<"第一章"<<endl;
cout<<" ";
cout.setf(ios::left); //設置對齊方式為left
cout.width(7); //設置寬度為7,不足用空格填充
cout<<"1.1";
cout<<"什么是C語言";
cout.unsetf(ios::left); //取消對齊方式,用缺省right方式
cout.fill('.'); //設置填充方式
cout.width(30); //設置寬度,只對下條輸出有用
cout<<1<<endl;
cout<<" ";
cout.width(7); //設置寬度
cout.setf(ios::left); //設置對齊方式為left
cout.fill(' '); //設置填充,缺省為空格
cout<<"1.11";
cout<<"C語言的歷史";
cout.unsetf(ios::left); //取消對齊方式
cout.fill('.');
cout.width(30);
cout<<58<<endl;
cout.fill(' ');
cout<<"第二章"<<endl;
}
View Code
/*一個使用填充,寬度,對齊方式的例子*/
#include <iomanip.h>
void main()
{
cout<<"第一章"<<endl;
cout<<" ";
cout<<setiosflags(ios::left)<<setw(7); //設置寬度為7,left對齊方式
cout<<"1.1";
cout<<"什么是C語言";
cout<<resetiosflags(ios::left); //取消對齊方式
cout<<setfill('.')<<setw(30)<<1<<endl; //寬度為30,填充為'.'輸出
cout<<setfill(' '); //恢復填充為空格
cout<<" ";
cout<<setw(7)<<setiosflags(ios::left); //設置寬度為7,left對齊方式
cout<<"1.11";
cout<<"C語言的歷史";
cout<<resetiosflags(ios::left); //取消對齊方式
cout<<setfill('.')<<setw(30)<<58<<endl; //寬度為30,填充為'.'輸出
cout<<setfill(' ')<<"第二章"<<endl;
}
View Code

測試4:浮點數的格式(操作控制符實現)

/*關於浮點數的格式*/
#include <iostream.h>
void main()
{
float f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl; //正常輸出
cout.setf(ios::showpos); //強制在正數前加+號
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpos); //取消正數前加+號
cout.setf(ios::showpoint); //強制顯示小數點后的無效0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpoint); //取消顯示小數點后的無效0
cout.setf(ios::scientific); //科學記數法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::scientific); //取消科學記數法
cout.setf(ios::fixed); //按點輸出顯示
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::fixed); //取消按點輸出顯示
cout.precision(18); //精度為18,正常為6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.precision(6); //精度恢復為6
}
View Code
#include <iomanip.h>
void main()
{
float f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl; //正常輸出
cout<<setiosflags(ios::showpos); //強制在正數前加+號
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::showpos); //取消正數前加+號
cout<<setiosflags(ios::showpoint); //強制顯示小數點后的無效0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::showpoint); //取消顯示小數點后的無效0
cout<<setiosflags(ios::scientific); //科學記數法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::scientific); //取消科學記數法
cout<<setiosflags(ios::fixed); //按點輸出顯示
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<resetiosflags(ios::fixed); //取消按點輸出顯示
cout<<setprecision(18); //精度為18,正常為6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout<<setprecision(6); //精度恢復為6
}
View Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM