一直以来写程序用的都是C和Cpp的混合物,只因C的IO会比C++的快一些,原因是C++的刷新缓冲区时耗费了时间。所以对C++的格式化输出都不是很了解,今天研究了下,主要参考书目是C++ Primer (第四版),附录里介绍的很详细!今记下来权作学习笔记了。
- #include <iostream>
- #include <iomanip>
- using namespace std;
- int main()
- {
- double pi=3.1415926535897;
- cout<<pi<<endl;
-
- cout.setf(ios::fixed); //称之为魔法配方
- cout.setf(ios::showpoint);
-
- //控制小数点后的位数,有效期到新的设置
- cout.precision(6);
- cout<<"输出带有位小数的pi"<<endl;
- cout<<pi<< endl;
-
- //{……}语句块中若有输出,始终以上一次设置的输出小数位为准
-
- cout.precision(3); //若需更改小数位,直接在输出前重设
- cout<<pi<< endl;
-
- //取消魔法配方,unsetf
- cout.unsetf(ios::fixed);
- cout<<pi<<endl;
-
- //setw()输出宽度!使用setw()要添加"<iomanip>"头文件
- cout<<"输出左(右)对齐,并设定输出宽度"<<endl;
- for(int i=1;i!=101;i++)
- {
- //设置为左对齐,输出宽度为5
- cout<<setiosflags(ios::left)<<setw(5)<<i;
- if(i%10==0)
- cout<<endl;
- }
-
- for(int i=1;i!=101;i++)
- {
- //设置为右对齐,输出宽度为
- cout<<setiosflags(ios::right)<<setw(5)<<i;
- if(i%10==0)
- cout<<endl;
- }
-
- //setfill(ch),使用字符进行填充
- cout<<"输出数据右对齐,并用*填充"<<endl;
- for(int i=1;i!=101;i++)
- {
- //设置为右对齐,输出宽度为5,并用*填充
- cout<<setiosflags(ios::right)<<setw(5)
- <<setfill('*')<<i<<' ';
- if(i%10==0)
- cout<<endl;
- }
-
- //修改输出整形变量进制,oct、hex、dec
- //分别为八进制、十六进制、十进制
- int d=10000,e=5555;
- cout<<"以不同进制输出数据分别为八、十六、十进制"<<endl;
- cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
- <<"d (hex) = "<<hex<<d<<endl<<e<<endl
- <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
-
- //使用showbase输出基数
- cout<<"输出数据基数"<<endl;
- cout<<showbase;//此句之后全部都会输出基数
- cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
- <<"d (hex) = "<<hex<<d<<endl<<e<<endl
- <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
-
- cout<<noshowbase;//停止输出基数:noshowbase
- cout<<"使用noshowbase停止输出基数"<<endl;
- cout<<"d (oct) = "<<oct<<d<<endl<<e<<endl
- <<"d (hex) = "<<hex<<d<<endl<<e<<endl
- <<"d (dec) = "<<dec<<d<<endl<<e<<endl;
- system("pause");
- return 0 ;
- }
运行结果:
3.14159
输出带有位小数的pi
3.141593
3.142
3.14
输出左(右)对齐,并设定输出宽度
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
输出数据右对齐,并用*填充
****1 ****2 ****3 ****4 ****5 ****6 ****7 ****8 ****9 ***10
***11 ***12 ***13 ***14 ***15 ***16 ***17 ***18 ***19 ***20
***21 ***22 ***23 ***24 ***25 ***26 ***27 ***28 ***29 ***30
***31 ***32 ***33 ***34 ***35 ***36 ***37 ***38 ***39 ***40
***41 ***42 ***43 ***44 ***45 ***46 ***47 ***48 ***49 ***50
***51 ***52 ***53 ***54 ***55 ***56 ***57 ***58 ***59 ***60
***61 ***62 ***63 ***64 ***65 ***66 ***67 ***68 ***69 ***70
***71 ***72 ***73 ***74 ***75 ***76 ***77 ***78 ***79 ***80
***81 ***82 ***83 ***84 ***85 ***86 ***87 ***88 ***89 ***90
***91 ***92 ***93 ***94 ***95 ***96 ***97 ***98 ***99 **100
以不同进制输出数据分别为八、十六、十进制
d (oct) = 23420
12663
d (hex) = 2710
15b3
d (dec) = 10000
5555
输出数据基数
d (oct) = 023420
012663
d (hex) = 0x2710
0x15b3
d (dec) = 10000
5555
使用noshowbase停止输出基数
d (oct) = 23420
12663
d (hex) = 2710
15b3
d (dec) = 10000
5555
请按任意键继续. . .
一直没有找到在Live Writer 的Coder插件,现在使用Word来写,感觉还算不错。

0 评论:
发表评论