C++流格式控制符的使用【来自网络】

简介: 注意添加头文件。 使用控制符控制输出格式 控制符 作用 dec 设置整数的基数为10 hex 设置整数的基数为16 oct 设置整数的基数为8 setbase(n) 设置整数的基数为n(n只能是16,10,8之一) setfill(c) 设置填充字符c,c可以是字符常量或字符变量 setprecision(n) 设置实数的精度为n位。

注意添加<iomanip>头文件。

使用控制符控制输出格式

控制符

作用

dec

设置整数的基数为10

hex

设置整数的基数为16

oct

设置整数的基数为8

setbase(n)

设置整数的基数为n(n只能是16,10,8之一)

setfill(c)

设置填充字符c,c可以是字符常量或字符变量

setprecision(n)

设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。

setw(n)

设置字段宽度为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

终止已设置的输出格式状态,在括号中应指定内容。

以小数形式,保留三位小数输出:
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;

====================================================

来自:http://blog.csdn.net/thisispan/article/details/7450411

====================================================

1.流格式控制符定义在<iomanip>头文件中,


setw(n)                                             指定打印字段的宽度

setprecision(n)                              设置一个浮点数的精度

fixed                                                 将一个浮点数以一个定点数的形式输出

showpoint                                      将一个浮点数以带小数,带结尾是0的形式输出,即便他没有小数部分

left                                                    将输出内容左对齐

right                                                 将输出内容右对齐


一。setw(n)    

默认情况下,输出内容需要多少个位置,cout就仅仅占用那么多屏幕位置。你可以使用setw(n),指定一个输出内容占用多少个位置。

例如:

cout<<setw(8)<<"C++"<<setw(6)<<"101"<<endl;

这样 c++之前打印5个空位置,(注意:是之前),,101之前打印3个空位置。


setw(n)每次只作用一个输出字段,所以,要想每个字段输出都设置宽度,必须每次都要写一遍setw(n)


二。setprecision(n)


setprecision(n)指定一个浮点数的精度。


1.)可以指定一个浮点数打印几位数字,其中n是总位数!!包括小数之前和之后的数字。超出的位数会被四舍五入进去!!!

(setprecision(n)不是舍弃,在高精度向低精度转换时,超出部分会被舍弃,如一个double k =1.5,int i = k ,这时候0.5被舍去,i  = 1,

高精度向低精度转换超出位数会被舍弃!

例如

double num = 1.23456;

cout<<setprecision(2)<<num<<endl;   ---- 输出1.2

cout<<setprecision(4)<<num<<endl;   ---- 输出1.235

cout<<setprecision(5)<<num<<endl;   ---- 输出1.22346


2)与setw()不同setprecision(n)一直作用到下一个setprecisin(n)之前所以,只需要写一个setprecision(n)就可以setw()要每次都写

C++四舍五入用


三。fixed

fixed可以强制数值不以科学技术法显示,即只用小数形式显示。

(在遇见大的浮点数时候,计算机会以科学技术法形式显示浮点数)


默认情况下,使用fixed之后,小数点后面数字位数为6,

如:double i  = 1.23;

cout<<fixed<<i<<endl;

会输出1.230000

3)我们可以使用fixed和setprecision(n)一起使用的方法,来改变这个小数点后的位数,当setprecision(n)作用于fixed之后时候,

setprecision(n)指定的是小数点后的数字位数

如:double k = 3.141592653;

cout<<fixed<<setprecision(2)<<k<<endl;

输出:3.14

这时候,后面也会四舍五入,,即只要用了setprecision(n)就会四舍五入!!!!

4)一旦使用了fixed之后,它会作用于后面所有的浮点数.

5)注意,默认情况下,没有小数的部分不会显示小数点。但使用fixed之后,会强制显示小数点。

如double i= 1;

cout<<fixed<<i<<endl;

显示 1.000000




四。showpoint (与setprecision(n)一起使用)

showpoint 强制小数后面以0显示。

cout<<setprecision(6);

cout<<showpoint<<1.23<<endl; ----显示 1.23000

cout<<showpoint<<123.0<<endl; ----显示 123.000


五。right /left  对齐方式


大多数系统默认情况下为右对齐,

可以使用;eft ,将输出格式左对齐

用法

cout<<left;

cout<<setw(8)<<1.23<<endl;

cout<<setw(8)<<1.23456<<endl;

 

 

==============================================================

下面来自:http://blog.sina.com.cn/s/blog_749f55cd0100p8up.html

==============================================================

1.使用控制符控制输出格式

控制符  作用 
dec  设置整数的基数为10 
hex  设置整数的基数为16 
oct  设置整数的基数为8 
setbase(n)  设置整数的基数为n(n只能是16,10,8之一) 
setfill(c)  设置填充字符c,c可以是字符常量或字符变量 
setprecision(n)  设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时,n为小数位数。 
setw(n)  设置字段宽度为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  终止已设置的输出格式状态,在括号中应指定内容。 

2.用流对象的成员控制输出格式

流成员函数  与之作用相同的控制符  作用 
precision(n)  setprecision(n)  设置实数的精度为n位。 
width(n)  setw(n)  设置字段宽度为n位。 
fill(c)  setfill(c)  设置填充字符c。 
setf( )  setiosflags( )  设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。 
ubsetf( )  resetiosflags( )  终止已设置的输出格式状态。 

cout.width(10);
cout.setf(ios::hex);

3.设置格式状态的格式标志

格式标志  作用 
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 

 
#include <iostream>
using namespace std;
int main()
 { int a=21;
   cout.setf(ios::showbase); //设置输出时的基数符号
   cout<<"dec:"<<a<<endl; //默认以十进制形式输出a
   cout.unsetf(ios::dec); //终止十进制的格式设置
   cout.setf(ios::hex); //设置以十六进制输出的状态
   cout<<"hex:"<<a<<endl; //以十六进制形式输出a
   cout.unsetf(ios::hex); //终止十六进制的格式设置
   cout.setf(ios::oct); //设置以八进制输出的状态
   cout<<"oct:"<<a<<endl; //以八进制形式输出a
   cout.unsetf(ios::oct); //终止以八进制的输出格式设置
   char *pt="China"; //pt指向字符串”china”
   cout.width(10); //指定域宽为10
   cout<<pt<<endl; //输出字符串
   cout.width(10); //指定域宽为10
   cout.fill('*'); //指定空白处以'*'填充
   cout<<pt<<endl; //输出字符串
   double pi=22.0/7.0; //计算pi值
   cout.setf(ios::scientific);//指定用科学记数法输出
   cout<<"pi="; //输出"pi="
   cout.width(14); //指定域宽为14
   cout<<pi<<endl; //输出"pi值
   cout.unsetf(ios::scientific); //终止科学记数法状态
   cout.setf(ios::fixed); //指定用定点形式输出
   cout.width(12); //指定域宽为12
   cout.setf(ios::showpos); //在输出正数时显示“+”号
   cout.setf(ios::internal); //数符出现在左侧
   cout.precision(6); //保留6位小数
   cout<<pi<<endl; //输出pi,注意数符“+”的位置
   return 0;}
运行情况如下:
    dec:21 (十进制形式)
    hex:Oxl5 (十六进制形式,以0x开头)
    oct:025 (八进制形式,以O开头)
    China (域宽为10)
    *****china (域宽为10,空白处以'*'填充)
    pi=**3.142857e+00 (指数形式输出,域宽14,默认6位小数)
    ****3.142857 (小数形式输㈩,精度为6,最左侧输出数符“+”)
 

说明:
1、成员函数width(n)和控制符setw(n)只对其后的第一个输出项有效。如果要求在输出数据时都按指定的同一域宽n输出,不能只调用一次width(n),而必须在输出每一项前都调用一次width(n)。
2、在表5中的输出格式状态分为5组,每一组中同时只能选用一种(例如,dec,hex和oct中只能选一,它们是互相排斥的),在用成员函数serf和 控制符setiosflags设置输出格式状态后,如果想改设置为同组的另一状态,应当调用成员函数unsetf(对应于成员函数serf)或 resetiosflags(对应于控制符sefiosflags),先终止原来设置的状态。然后再设置其他状态。
同理,程序倒数第8行的unsetf函数的调用也是不可缺少的。读者不妨上机试一试。
3、用serf函数设置格式状态时,可以包含两个或多个格式标志,由于这些格式标志在lOS类中被定义为枚举值,每一个格式标志以一个二进位代表,因此可以用“位或”运算符“I”组合多个格式标志
4、可以看到:对输出格式的控制,既可以用控制符(如例2),也可以用cout流的有关成员函数(如例3),二者的作用是相同的。控制符是在头文件 mmamp中定义的,因此用控制符时,必须包含iomanip头文件。cout流的成员函数是在头文件iostream中定义的,因此只需包含头文件 iostream,不必包含iomanip。许多程序人员感到使用控制符方便简单,可以在一个cout输出语句中连续使用多种控制符。
5、关于输山格式的控制,在使用中还会遇到一些细节问题,不可能在这里全部涉及。在遇到问题时,请查阅专门手册或上机试验一下即可解决。


以小数形式,保留三位小数输出:
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;
 
//<iomanip>在使用流操纵算子时使用  
03.//using namespace std;  
04. 
05.//以下所有的setf()都有对应的unsetf()用于取消设置  
06.//所有的setiosflags()可以用resetiosflags()取消  
07.//标志位fmtflags的命名空间可以使用ios_base::或者ios::  
08. 
09.int laneri = 12345;  
10.double lanerd = 56789;  
11. 
12.//1、设置整数进制输出  
13.//重载1:fmtflags ios_base::setf(fmtflags _Mask);  
14.//重载2:fmtflags ios_base::setf(fmtflags _Mask, fmtflags _Unset);  
15.//使用重载1的时候,一定要先取消当前基,之后才可以设置新的基  
16.//使用重载2的时候,第二个参数设为当前的基,或者当不知道当前基时,设为ios_base::basefield清除当前的所有可能的基  
17.//可使用的标志:ios::dec, ios::oct, ios::hex, ios::basefield(= dec|oct|hex)  
18.cout.unsetf(ios::dec);   //等价1  
19.cout.setf(ios::hex);  
20.cout.setf(ios::hex, ios_base::basefield); //等价2  
21.cout<<laneri<<endl;  
22.cout<<setiosflags(ios::hex)<<laneri<<endl; //等价3  
23.cout<<std::hex<<laneri<<endl;   //等价4  
24.//使用输入输出操纵符也能有等价效果(命名空间使用std::,否则会有多余的字符),注意这种方法其实不止对本句生效  
25. 
26.//2、 显示进制前导字符(0、0x)  
27.cout.setf(ios::showbase);  
28.cout<<setiosflags(ios::showbase)<<laneri<<endl;  
29.cout<<std::showbase<<laneri<<endl;  
30. 
31.//3、使用科学记数法  
32.//只对数据类型为小数的变量有效(或者字面值是小数)  
33.//对precision有影响(详见precision的说明)  
34.//对ios::fixed有影响(详见fixed的说明),但不会被fixed影响  
35.cout.setf(ios::scientific);  
36.cout<<lanerd<<endl;  
37.cout<<setiosflags(ios::scientific)<<lanerd<<endl;  
38.cout<<std::scientific<<lanerd<<endl;  
39. 
40.//4、设置小数的浮点/定点显示方式  
41.//主要依靠precision体现(详见precision的说明)  
42.//当设置了ios::scientific标志时,ios::fixed会受到影响,std::fixed不会  
43.cout.setf(ios::fixed);   
44.cout<<lanerd<<endl;  
45.cout<<setiosflags(ios::fixed)<<lanerd<<endl;   
46.cout<<std::fixed<<lanerd<<endl;   
47. 
48.//5、设置小数数据类型的显示精度,受到scientific和fixed的影响  
49.//当设置(fixed | scientific)时,precision(n)表示小数点后固定显示n位小数  
50.//当不设置(fixed & scientific)时,precision(n)表示固定显示n位数字  
51.// 其中,当是整数且位数m小于n,而又没有设置showpoint的时候,只显示m位整数。例如:precision(3),12->12  
52.// 其中,当是整数且位数p大于n,无论设置showpoint与否,都四舍五入后使用科学计数法。例如:precision(3),1234->1.23e+003  
53.cout.precision(3);  
54.cout<<lanerd<<endl;  
55.cout<<setprecision(3)<<3.1415926<<endl;  
56.    
57.//6、强制浮点数类型变量的小数点显示  
58.//如果是整数,大于precision宽度时使用科学计数法,小于precision则小数点后面补0,等于precision时显示小数点但无小数  
59.//例:不设fixed,precision(6): 1234567->1.23457E+006;   12345->12345.0;    123456->123456.  
60.//  设fixed,precision(6): 1234567->1234567.000000; 12345->12345.000000; 123456->123456.000000  
61.cout.setf(ios::showpoint);  
62.cout<<setiosflags(ios::showpoint)<<lanerd<<endl;  
63.cout<<std::showpoint<<lanerd<<endl;  
64. 
65.//7、设置屏幕上的最小显示宽度  
66.//实际字符数大于等于这个数字,显示全部;小于这个数字,用fill()设置的字符来填充其他占位符  
67.//注意:宽度设置只对下一个"<<"输出有效  
68.//例如:cout<<setw(10)<<right<<"laner"<<"linke";只有"laner"是占10个字符,linke不是  
69.cout.width(12);  
70.cout<<setw(12)<<3.14<<endl;  
71. 
72.//8、显示对齐方式,默认为左对齐  
73.cout.setf(ios::right);  
74.cout<<setiosflags(ios::right)<<laneri<<endl;  
75.cout<<std::right<<6.28<<endl;  
76. 
77.//9、设置不足显示宽度时的填充字符,默认为' '  
78.cout.fill('*');  
79.cout<<setfill('$')<<laneri<<endl; 

 

 

 

 

 

 

 

相关文章
|
4月前
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
107 7
|
4月前
|
存储 JSON 数据库
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
142 0
|
4月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
176 7
|
23天前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
59 2
|
27天前
|
Windows
【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析
【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析
|
2月前
|
存储 安全 Linux
网络请求的高效处理:C++ libmicrohttpd库详解
网络请求的高效处理:C++ libmicrohttpd库详解
|
3月前
|
网络协议 C语言 网络架构
计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)
计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)
167 7
|
4月前
|
Serverless C++
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
|
4月前
|
存储 安全 Linux
C++文件格式深度解析:从底层结构到关键特性
C++文件格式深度解析:从底层结构到关键特性
367 3
C++文件格式深度解析:从底层结构到关键特性
|
4月前
|
SQL 存储 分布式计算
Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
【4月更文挑战第6天】Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
105 1