C++问题:请问以下程序如何右对齐

来源:百度知道 编辑:UC知道 时间:2024/06/25 05:13:36
#include <iostream.h>
void main()
{
int a, b,c;
cout<<"*"<<"\t";
for(a=1;a<=9;a++)
cout<<a<<"\t";

for(a=1;a<=9;a++)
{
cout<<a<<"\t";
for(b=1;b<=9;b++)
{
c=b*a;
if(c/a<a)
continue;
cout<<c<<"\t";
}
cout<<"\n";
}

}

另第二行为何会多空出一行?烦请一并解答。谢谢!
能不能帮忙解释一下:我的程序第二行为何会多空出一行?

首先我来给你分析一下, if(c/a<a)continue;虽然是被乘数比乘数小时就不用输出结果,但是后面相乘得到的结果还是会按顺序占用你前面的字节,比如3*1,3*2都不用输出,从3*3开始输出,但是要想右对齐的话必须把原来3*1和3*2的位置置空才行,所以应该在你原有的基础上还加上一个句子
if(c/a<a)
{cout<<" "<<"\t" ;
continue;}
注意中间是一个空格符
这样改之后你会发现除了第一行和第二行之间没有空一行,其他行之间都会空一行
你不妨再想想, cout<<"\n"; 这个语句不就是为了让从第二行开始每行之间都有一个空行的么,而你的结果只在第二行和三行之间才有空行,岂不是空行少了么?说到这里估计你应该明白了

其实那不是你的错误,那是显示效果,输出字符超出显示区域就自动换行,

试试下面的程序
#include <iostream.h>
#include <iomanip.h>
void main()
{
int a, b,c;
cout<<"*";
for(a=1;a<=9;a++)
cout<<setw(4)<<a;
cout<<endl;
for(a=1;a<=9;a++)
{
cout<<a;
cout<<setw((a-1)*4)<<"";
for(b=1;b<=9;b++)
{

c=b*a;
if(c/a<a)
continue;
else
{
cout<<setw(4)<<c;
}