C++输出格式控制的问题

Laifer 2015-01-10 11:13:28
按照书上打印倒三角形的代码展开了一下,发现输出的填充字符比setw()中设置的少了一个,是为什么
#include<iostream.h>
#include<iomanip.h>
void main(){
for(int n=1;n<8;n++){
cout<<setfill(' ')<<setw(n)<<'a'<<setfill('*')<<setw(15-2*n)<<'b'<<endl;
}
}

输出是这样的:

比如最后一行 应该是15-2*7=1个星号,但是实际却没有
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Laifer 2015-01-11
  • 打赏
  • 举报
回复
明白了,谢谢你耐心的解答
Falleyes 2015-01-10
  • 打赏
  • 举报
回复
setw是设置显示字符的宽度,你在setfill('*')<<setw(15-2*n)<<'b'这一句设置的是‘b’这个字符的宽度是15-2*n,是个奇数,剩下的用‘*’填充,‘*’的个数当然是这个奇数减一,是偶数。 应该这样改:
#include<iostream.h>
#include<iomanip.h>
void main(){
    for(int n=1;n<8;n++){
        cout<<setfill(' ')<<setw(n)<<'a'<<setfill('*')<<setw(16-2*n)<<'b'<<endl;   //15->16
    }
}
Falleyes 2015-01-10
  • 打赏
  • 举报
回复
引用 2 楼 Laifer 的回复:
[quote=引用 1 楼 Falleyes 的回复:] setw是设置显示字符的宽度,你在setfill('*')<<setw(15-2*n)<<'b'这一句设置的是‘b’这个字符的宽度是15-2*n,是个奇数,剩下的用‘*’填充,‘*’的个数当然是这个奇数减一,是偶数。 应该这样改:
#include<iostream.h>
#include<iomanip.h>
void main(){
    for(int n=1;n<8;n++){
        cout<<setfill(' ')<<setw(n)<<'a'<<setfill('*')<<setw(16-2*n)<<'b'<<endl;   //15->16
    }
}
setw()中的字符宽度不应该是对于上一个setfill()中的字符起作用吗[/quote]起作用,但是setw是一个设置字符宽度的函数,是将后面的内容str设置一定的宽度,这个宽度内,除str外其他的空白用你事先用setfill设置好的字符填充。你第一行设置的宽度是15,正式显示内容是一个字符‘b',那么剩下的14个宽度单位用’*‘填充。
Laifer 2015-01-10
  • 打赏
  • 举报
回复
引用 1 楼 Falleyes 的回复:
setw是设置显示字符的宽度,你在setfill('*')<<setw(15-2*n)<<'b'这一句设置的是‘b’这个字符的宽度是15-2*n,是个奇数,剩下的用‘*’填充,‘*’的个数当然是这个奇数减一,是偶数。 应该这样改:
#include<iostream.h>
#include<iomanip.h>
void main(){
    for(int n=1;n<8;n++){
        cout<<setfill(' ')<<setw(n)<<'a'<<setfill('*')<<setw(16-2*n)<<'b'<<endl;   //15->16
    }
}
setw()中的字符宽度不应该是对于上一个setfill()中的字符起作用吗

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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