cout<

iuiiin 2011-08-18 01:40:55
如题。
...全文
526 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2011-08-18
  • 打赏
  • 举报
回复
setfill('*')不是用*来填充缓冲区,而是下一个输出的字段,如果长度不够setw()指定的长度,用setfill设置的字符来填充。
具体到 2# 的程序,第一个 endl 的时候清缓冲区加换行,但此时缓冲区没有任何内容,而 endl 也不是一个字段,所以只是打了的换行。
第二行的时候,'\n'是一个字符,虽然它刚好也起换行的作用,因此,cout 计算它的长度,并用*填充其余的地方,楼主要是看的仔细的话,应该是输出了 9 个 *,setw(10) 设置的10的宽度,最后一个字符就是‘\n’
war10811 2011-08-18
  • 打赏
  • 举报
回复
setw(10) setfill('*')只是设置填充格式,不是往里填充10个'*'
iuiiin 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 war10811 的回复:]

引用 7 楼 iuiiin 的回复:
引用 2 楼 war10811 的回复:

看下这个
C/C++ code

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
cout<<setw(10)<<setfill('*')<<endl;
cout……
[/Quote]

把我说糊涂了。
不是用'*'号来填充缓冲区吗,第二行只是把endl变成了'\n',那些填充的*号为什么就能显示了?
war10811 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iuiiin 的回复:]
引用 2 楼 war10811 的回复:

看下这个
C/C++ code

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
cout<<setw(10)<<setfill('*')<<endl;
cout<<setw(10)<<setfill('……
[/Quote]
因为缓冲区没任何字符,endl只是新起了一行
setw(10) setfill('*')只是填充格式,要有字符输入才起作用
而第2个'\n'是字符

还有就是缓冲区是IO操作提升效率的关键,过多使用endl刷新缓冲区效率会变低
turing-complete 2011-08-18
  • 打赏
  • 举报
回复
endl 换行且刷新流
iuiiin 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 war10811 的回复:]

看下这个
C/C++ code

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
cout<<setw(10)<<setfill('*')<<endl;
cout<<setw(10)<<setfill('*')<<'\n';
return 0;
}
[/Quote]

很奇怪,为什么只输出了一行*好呢?
第一行星号到哪里去了,不是说endl会刷新缓冲立刻输出么?
xwqmail 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 war10811 的回复:]

endl 是在输出结束处插入一个新行,清缓冲区。
'\n' 只是一个换行符
[/Quote]
正解
luciferisnotsatan 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 war10811 的回复:]

endl 是在输出结束处插入一个新行,清缓冲区。
'\n' 只是一个换行符
[/Quote]
++
小木 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 war10811 的回复:]
endl 是在输出结束处插入一个新行,清缓冲区。
'\n' 只是一个换行符
[/Quote]
学习
Jxiaoshen 2011-08-18
  • 打赏
  • 举报
回复
++
[Quote=引用 1 楼 war10811 的回复:]
endl 是在输出结束处插入一个新行,清缓冲区。
'\n' 只是一个换行符
[/Quote]
war10811 2011-08-18
  • 打赏
  • 举报
回复
看下这个

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
cout<<setw(10)<<setfill('*')<<endl;
cout<<setw(10)<<setfill('*')<<'\n';
return 0;
}
war10811 2011-08-18
  • 打赏
  • 举报
回复
endl 是在输出结束处插入一个新行,清缓冲区。
'\n' 只是一个换行符

65,186

社区成员

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

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