回 帖 发 新 帖 刷新版面

主题:请人帮忙详解一下setw()函数的应用

不是很懂SETW()函数的具体应用,有谁说明一下.域宽的具体涵义是什么?
比如参考书上有下面代码:
cout<<"element"<<setw(13)<<"counter\n";
for(int i=0;i<5;++i)
{
cout<<setw(7)<<i<<setw(13)<<rand()%7+1<<'\n';
}
结果为:
element        counter
0               5
1               4
2               5
3               2
实在看不出前一个setw(13)和后面的setw(7),setw(13)产生的效果有啥区别.如果不要后面setw(7)的会产生什么结果呢?
[em18]

回复列表 (共3个回复)

沙发

所谓域宽,就是输出的内容(数值或字符等等)需要占据多少个字符的位置,如果位置有空余则会自动补足。比如我们要设置域宽为2,那么当输出一位数1的时候输出的就是“ 1”,即在1前面加了一个空格。空格和数字1正好一共占用了两个字符的位置。

我们在设置域宽和填充字符的时候要注意几点:①设置域宽的时候应该填入整数,设置填充字符的时候应该填入字符。②我们可以对一个要输出的内容同时设置域宽和填充字符,但是设置好的属性仅对下一个输出的内容有效,之后的输出要再次设置。即cout <<setw(2) <<a <<b;语句中域宽设置仅对a有效,对b无效。③setw和setfill被称为输出控制符,使用时需要在程序开头写上#include "iomanip.h",否则无法使用。

摘自《易学C++》第五章,希望对LZ有帮助。

板凳

1楼的仁兄已经说的很明白了,使用setw()函数时要包含由系统提供头文件"iomanip.h"。

cout<<"element"<<setw(13)<<"counter\n";      //两个字符串之间有13个空格
for(int i=0;i<5;++i)
{
cout<<setw(7)<<i<<setw(13)<<rand()%7+1<<'\n';  //先输出7个空格,再输出i,然后又是13个空格

                                                                      

3 楼

实际上就是ASCII set 的UNICODE版本

我来回复

您尚未登录,请登录后再回复。点此登录或注册