关于cout输出中setw()的问题

Gzd2003 2008-11-14 04:05:19
有以下程序,setw()设置域宽和空格是什么关系?

#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int a=29,b=1001;
cout<<"123456789"<<endl;
cout<<a<<setw(6)<<b<<endl;
cout<<setw(6)<<a<<b<<endl;
}

输出结果如下:
123456789
29 1001
291001

设置了6个宽度,怎么第一排只有2个空格,第二行只有4个空格呢?不明白了。
...全文
702 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ptlz1107 2009-02-28
  • 打赏
  • 举报
回复
受教了
toadzw 2008-11-14
  • 打赏
  • 举报
回复
setw()表明后面用于字符输入的最低宽度,不足空格补上,且为右对齐方式;
thinkingbetter 2008-11-14
  • 打赏
  • 举报
回复
我用vc++6.0
结果如下:

123456789
29 1001
291001

cout <<a <<setw(6) <<b <<endl; ||setw(6) 采取就近原则 对它后面的有效
并且数值默认右对齐 所以1001
前面空两隔
cout <<setw(6) <<a <<b <<endl; ||此时对a有效,29 右对齐,前面空四隔
elegant87 2008-11-14
  • 打赏
  • 举报
回复
setw是设置字符显示宽度的操作符,宽度值中包括字符的长度,
默认是右对齐,
当字符长度超过设置的长度时,不会去截断字符,而是将字符全部显示。
学习一下
Lnnu_lc 2008-11-14
  • 打赏
  • 举报
回复
讲的都挺好
la_feng 2008-11-14
  • 打赏
  • 举报
回复
setw(n)
表示下一个输出至少要占用n个字符长度,如果下个输入长度小于n则输出靠右,左端以空格补足,下个输出大于n则按照正常输出
wzfxyer 2008-11-14
  • 打赏
  • 举报
回复
看来是只对下一个输出有效。
而且是和你要输出的数的位数相加相加=6
herman~~ 2008-11-14
  • 打赏
  • 举报
回复
加上要显示的6个
jia_xiaoxin 2008-11-14
  • 打赏
  • 举报
回复
setw是设置字符显示宽度的操作符,宽度值中包括字符的长度,
默认是右对齐,
当字符长度超过设置的长度时,不会去截断字符,而是将字符全部显示。
aFlyingEagle 2008-11-14
  • 打赏
  • 举报
回复
在给楼主补充上面的回答:
setw(n);
接在他后面的输出如果n大于你想要输出的字符的长度就是安n对齐,前面以空格补充!
nullah 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nullah 的回复:]
楼主
你的输出有问题
我在VS2005输出为:
123456789
29 1001
291001
请按任意键继续......


C/C++ code
setw(n)
如果输出字符长度>n 则输出字符
如果输出字符长度<n 则右对齐输出
左边的用空补齐n
[/Quote]
看来是排版问题 四个空格怎么只显示两个
nullah 2008-11-14
  • 打赏
  • 举报
回复
楼主
你的输出有问题
我在VS2005输出为:
123456789
29 1001
291001
请按任意键继续......


setw(n)
如果输出字符长度>n 则输出字符
如果输出字符长度<n 则右对齐输出
左边的用空补齐n
qq675927952 2008-11-14
  • 打赏
  • 举报
回复
是setw(6)往后算包括你要输出的一共6个,

上面函数的输出应该是这样的吧
123456789
29 1001
291001
anbyice 2008-11-14
  • 打赏
  • 举报
回复
补一下,你那个cout < <a < <setw(6) < <b < <endl; a先输出,没有受setw(6)影响,而输出b时就受setw(6)影响了,b占了四位,剩下两位就是默认的空格了啊
anbyice 2008-11-14
  • 打赏
  • 举报
回复
setw(n)中的n指的是输出长度为n,你说的设置空格,应该加上setfill(' '),这样子才是设置了空格,如cout<<setfill(' ')<<setw(6)<<a<<endl;这里a是29占了两位,而你设置n为6,那么还有四位没有东西(默认为空格),你用setfill设置,那么那空下的四位就被空格所代替,如果改成setfill('a'),那四位就都变成a了。
cyj626 2008-11-14
  • 打赏
  • 举报
回复
up
太乙 2008-11-14
  • 打赏
  • 举报
回复
是加上你要显示的一共六个!

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧