c++学习之控制符控制输出格式


在C++程序输出数据时,往往使用默认格式,由系统根据数据类型来输出;但是当我们想要输出特定格式的数据时,可以通过使用控制符来达到我们的目的。例如:以八进制、十进制或十六进制,科学计数法输出,添加+号,设置输出字段位域与对齐方式,实数的有效位数或小数位数等。

常见的控制符如下表

控制符 描述
oct 设置整数基数为8,即八进制
dec 设置整数基数为10,即十进制
hex 设置整数基数为16,即十六进制
setbase(n) 设置整数基数为n,n值为8、10或16
setw(n) 设置下一字段输出位域的宽度为n位,即设置后下一<< <<间的内容
setiosflags(ios::left) 输出数据位域中左对齐,相对于setw(n)的变化
setiosflags(ios::right) 输出数据位域中右对齐,相对于setw(n)的变化
setfill(c) 输出数据位域中空白填充c字符,例如:setfill('*')
setprecision(n) 设置实数输出的有效位数为n为,包括整数和小数,当setiosflags(ios::scientific)和setiosflags(ios::fixed)项设置后表达为小数的位数
setiosflags(ios::scientific) 设置浮点数以科学计数法输出(用e描述)
setiosflags(ios::fixed) 设置浮点数固定小数位数,由setprecision(n)决定
setiosflags(ios::uppercase) 设置以科学计数法或十六进制输出时字母大写
setiosflags(ios::showpos) 设置正数输出时,前边添加+号
setiosflags(ios::shipws) 忽略前导空格
resetiosflags 取消对应控制符设置的功能,括号内为上述可能的内容;例如:setiosflags(ios::scientific)和setiosflags(ios::fixed)不能同时设置,需先取消前者后者才有效。

上述控制符定义在头文件iomanip中,编写程序时需要添加该头文件。

代码示例:

 1 #include <iostream>
 2 #include <iomanip>
 3 
 4 using namespace std;
 5 int main(void) 
 6 {
 7     int a = 10;
 8     cout << "设置基数为dec :" << dec << a << endl;
 9     cout << "设置基数为hex :" << hex << a << endl;
10     cout << "设置基数为otc :" << oct << a << endl;
11     cout << "不再设基数值  :" << a << endl;  // 依旧保持最近的输出格式,即oct格式输出
12     cout << "设置基数值为10:" <<setbase(10) << a << endl;
13 
14     char *p = "hello";
15 
16     /* setw(n)设置位域宽度,设置宽度仅下一字段有效 */
17     cout << "位域20:" << setw(20) << p << endl;     // 设置输出位域,仅下一个字段有效,即设置后接的<< <<
18     cout << "位域20:" << setw(20) << "123" << "456" << "789" << "-->位域123字段有效" << endl;
19 
20     /*   
21         setiosflags(ios::left)  :左对齐,取消在前面加re
22         setiosflags(ios::right) :右对齐,取消在前面加re
23         注意 :设置其中一项后,要取消后才能设置另一项,否则无效。
24     */
25     cout << setiosflags(ios::right);   // 右对齐
26     cout << "在右边:" << setw(20) << p << endl;
27     cout << resetiosflags(ios::right);   // 关闭右对齐
28     cout << setiosflags(ios::left);   // 左对齐
29     cout << "在左边:" << setw(20) << p << endl;
30 
31     /* setfill(c) 空白填充,需配合setw(n), 位域当中未显示的填充c字符,如'*'*/
32     cout << "以下空白填充*:" << setfill('*') << endl;   // 空白填充
33     cout << setw(20) << p << endl;
34     cout << resetiosflags(ios::left) << setiosflags(ios::right);   // 关闭左对齐,开始右对齐
35     cout << setw(20) << p << endl;
36     
37     /*
38         setprecision(5):设置实数有效数据个数或小数个数
39         setiosflags(ios::scientific): 科学计数法输出,与fix不同时出现,添re+取消设置
40         setiosflags(ios::fixed) :设置浮点数以固定的小数位数显示,与scientific不同时出现,添re+取消设置
41         setiosflags(ios::uppercase):字母大写
42         setiosflags(ios::showpos):正数显示+号
43     */
44     double fValue = 123.456789;
45     cout << "输出浮点数:" << fValue << endl;
46     cout << "以下设置一直有效-->" << endl;
47     // 设置输出实数有效数字个数,包含正数和小数,当以固定形式和科学计数法输出时,则指有效小数位数
48     cout << "有效数字设为5  :" << setprecision(5)              << fValue << endl;  
49     cout << "科学计数法输出 :" << setiosflags(ios::scientific) << fValue << endl;  // 以科学计数方式输出
50     cout << "输出字母大写   :" << setiosflags(ios::uppercase)  << fValue << endl;  // 科学计数字母E和十六进制字母X等输出大写
51     cout << "输出正数添加+号:" << setiosflags(ios::showpos)    << fValue << endl;  // 输出正数添加+号 
52     cout << "固定小数位数   :" << resetiosflags(ios::scientific) << setiosflags(ios::fixed) ;  // 固定实数以小数格式输出的位数,即设置后有效输出个数变成有效小数位数
53     cout << setprecision(5) << fValue << endl;
54 
55     //cout << setiosflags(ios::shipws) <<"   忽略前导空格" << endl; // 不支持,未验证
56     
57     return 0;
58 }

代码运行结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM