C(C++)输入输出格式
c&c++输入输出控制格式
许多情况下,都需要控制输出结果的表现形式。如输出宽度、输出精度、输出格式等。C++的iomanip.h中定义了许多控制符,这些控制符可以直接插入到流中,控制数据的输出格式。控制符有两种:控制常量和控制函数,控制常量定义在iostream.h中,控制函数定义在iomanip.h中。
常用控制符在iostream.h中,函数控制符在iomainip.h中。
控制符 描述
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进制数小写输出
注意:除了setw(n)控制符之外,其他控制符对后面的所有输出起控制作用,直到改变输出格式为止。
例1、输出8进制和16进制数
常量dec、hex和oct用来控制必须按10进制、16进制或8进制形式输出。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int number=15; 6 cout<<dec<<number<<" "<<hex<< number<<" "<<oct<<number<<" "; 7 return 0; 8 }
结果为:
15
f
17
注意:由于这三个标识符已经被定义为系统常量,注意不能在定义为其他变量使用。
上面这段代码没有加#include<iomanip>也能正确运行,但是假如想下面这一段代码使用了setw就要加这个类引用了。
例2、设置值的输出宽度
函数setw(n)用来控制输出宽度,如果数据实际宽度大于设置宽度,将按实际宽读输出;如果设置宽度大于实际输出宽度,数据输出时将在前面补相应数量的空格。另外,该控制符只对一次输出起作用。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main( ) 5 { 6 int number=1234; 7 cout<<setw(5)<<number<<setw(5)<<564<<endl; 8 return 0; 9 }
运行结果:
_1234_ _564
例3、设置填充字符
setfill(c)函数用来设置填充的字符,默认情况下为空格。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main() 5 { 6 int number=1234; 7 cout <<setfill('*')<<setw(5)<<number<<endl; 8 return 0; 9 }
输出结果:
*1234
例4、设置对齐格式
函数setiosflags(ios::left)和setiosflags(ios::right)用来控制输出左右对齐格式。当数据实际宽度小于输出宽度时该控制才起作用。默认情况下数据输出是右对齐。
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main() 5 { 6 int number=1234; 7 cout<<setiosflags(ios::left)<<setfill('*')<<setw(6)<<number<<endl; 8 cout<<setiosflags(ios::right)<<setfill('*')<<setw(6)<<number<<endl; 9 return 0; 10 }
输出结果:
1234**
**1234
例5、控制浮点数显示
函数setprecision(n)可用来控制输出流显示浮点数的数字个数(整数部分加小数部分)。
c++默认的流输出数值的有效位是6。当小数截短显示时,进行四舍五入处理。
函数setiosflags(ios::fixed)用来控制符点数是按纯小数方式显示。系统默认为纯小数方式输出。
函数setiosflags(ios::scientific)用来控制符点数是按科学记数法方式显示。
函数setiosflags(ios::showpoint) 用来强制显示小数点和符号。
1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main() 5 { 6 const float x=20.0/7,y=18.0/6; 7 8 cout<<"x: "; 9 cout<<x<<endl; 10 cout<<setiosflags(ios::scientific)<<x<<endl; 11 cout<<setiosflags(ios::fixed)<<x<<endl; 12 13 cout<<" y: "; 14 cout<<y<<endl; 15 cout<<setiosflags(ios::showpoint)<<y<<endl; 16 return 0; 17 }
输出结果为:
2.85714 (默认6位,整数部分加小数部分)
2.857143e+000 (默认6位,指小数部分)
3 (默认0不输出)
3.00000 (强制输出0)
标准输入输出函数printf与scanf
在程序设计中输入输出是不可缺少的内容,因此在C语言中提供了printf与scanf标准函数来满足输入输出要求。需要说明的是,在C++中提供了更方便的输入输出控制,这就是I/O流。但为了满足一些对printf与scanf使用习惯的要求,C++中仍保留了这两个函数。
<1>、printf函数
格式:
printf (格式控制字符串,输出项1,输出项2,…)
说明:
(1)格式控制字符串决定了数据输出的结果。它由“格式说明字符”和“普通字符”组成。普通字符按原样输出,格式说明字符将对应输出数据转换成指定的格式输出。格式控制字符串的形式为:
%[域宽]格式字符
域宽部分是可选的,每个格式说明对应于一个输出参数,该参数被转换成由格式说明规定的数据格式后输出。
例如:
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main() 5 { 6 int a=10; 7 float b=-5.2; 8 printf("a=%d,b=%8.3f ",a,b); 9 return 0; 10 }
输出结果如下:
a=10,b= -5.200
(2)格式说明字符及其规定的输出格式
printf的格式说明字符见下表
格式说明符 参数类型 输出格式
d,I int 十进制整数
o int 八进制数(无前导0)
x,X int 十六进制数(无前缀0x或0X)
u int 无符号十进制数
c int 单个字符
s char * 字符串(必须以’