cout执行时间的问题

pcliuguangtao 2010-03-26 07:10:04
想问一下为什么9和输出金字塔之间会有换行?
我试过了用C来编的话是不会出现这个换行的,就是用cout出现了问题~~先谢谢啦

35、打印数字金字塔
#include <iostream>
using namespace std;
int main()
{
int n,i,j,p;cin>>n;
for(i=0;i<n+1;i++)
{
for(p=0;p<2*(n-i);p++){cout<<" ";}
for(j=1;j<i+1;j++)
cout<<j<<" ";
for(j=i-1;j>0;j--)
cout<<j<<" ";
cout<<endl;

}
return 0;
}
图形
9

1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
请按任意键继续. . .
**9和下面的金字塔之间有一个空行是因为先执行了for之后的cout<<endl然后再按正常顺序执行,初步判断是由于cout缓冲区的问题
如下所示:
9
*
1 *
1 2 1 *
1 2 3 2 1 *
1 2 3 4 3 2 1 *
1 2 3 4 5 4 3 2 1 *
1 2 3 4 5 6 5 4 3 2 1 *
1 2 3 4 5 6 7 6 5 4 3 2 1 *
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 *
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 *
请按任意键继续. . . 代码如下:
#include <iostream>
using namespace std;
int main()
{
int n,i,j,p,k;
cin>>n;
for(i=0;i<n+1;i++)
{
for(p=0;p<2*(n-i);p++)
{cout<<" ";}
for(j=1;j<i+1;j++)
cout<<j<<" ";
for(j=i-1;j>0;j--)
cout<<j<<" ";
cout<<"*"<<endl;

}
return 0;
}

...全文
218 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcliuguangtao 2010-03-27
  • 打赏
  • 举报
回复
谢谢大家对我的帮助,十分感谢
AlanBruce 2010-03-27
  • 打赏
  • 举报
回复

cout<<endl;//换行
cattycat 2010-03-27
  • 打赏
  • 举报
回复
不是缓冲的问题,
for(i=0;i<n+1;i++)
{
for(p=0;p<2*(n-i);p++){cout<<" ";}
for(j=1;j<i+1;j++)
cout<<j<<" ";
for(j=i-1;j>0;j--)
cout<<j<<" ";
cout<<endl;

}
第一次i=0的时候,里面j的for循环没有执行,直接输出了cout<<endl就是换行的。
for(i=0;i<n+1;i++)改成i=1就行了。
小猴饲养员 2010-03-27
  • 打赏
  • 举报
回复
原因楼上说了。lz要学会用断点调试。在cout<<endl;前加断电。很容易找到原因
xxphddz 2010-03-26
  • 打赏
  • 举报
回复
cout 实际上只执行了将数据存放到缓冲区的操作,当缓冲区满后就会输出!
也可cout << flush() ;立即清空缓冲区;
cout << endl; endl功能相当于flush 和 "\n"两个算子和;、
cout 产生换行问题很好解释;
至于c代码没有空格需要有代码才行
boych 2010-03-26
  • 打赏
  • 举报
回复
将i = 0 改成 i = 1 试一下,跟cout缓冲区没什么关系吧
cy330206 2010-03-26
  • 打赏
  • 举报
回复
这个应该跟时间无关的
cy330206 2010-03-26
  • 打赏
  • 举报
回复
楼主注意基础,,,
cy330206 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiakan008 的回复:]
for(p=0;p<2*(n-i);p++){cout<<" ";}
for(j=1;j<i+1;j++) //当第一次运行时 i=0这个循环将不会进入
cout<<j<<" ";
for(j=i-1;j>0;j--) //当第一次运行时 i=0这个循环将不会进入
cout<<j<<" ";
所以第一次输出的是一个空行
[/Quote]


up
dirkjww 2010-03-26
  • 打赏
  • 举报
回复
不懂`````帮UP`
itxuls 2010-03-26
  • 打赏
  • 举报
回复
......
BT六眼飞鱼 2010-03-26
  • 打赏
  • 举报
回复
for(p=0;p<2*(n-i);p++){cout<<" ";}
for(j=1;j<i+1;j++) //当第一次运行时 i=0这个循环将不会进入
cout<<j<<" ";
for(j=i-1;j>0;j--) //当第一次运行时 i=0这个循环将不会进入
cout<<j<<" ";
所以第一次输出的是一个空行

64,637

社区成员

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

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