和分别是制表符和换行符转义序列,所以\t
改变\n
printf("%d\t", c);
至
printf("%d", c);
摆脱标签,并删除
printf("\n");
总之,放松新线...容易
顺便说一句:你为什么要宣布第二个int c
?您的代码以声明一堆整数开始,其中一些您不使用:
int i, j, k, y, z, x, c, b, a, C;
//last 3 aren't used
//c declared here, though
//I'd write:
int i, j, k, y, z, x, c;
再往下:
//inside second loop:
int c = 0;
//would be better if wou wrote:
c = 0;
最后一点:您遗漏了一条return
语句,但您的main
函数签名表明(正确地)主函数应该返回一个 int,而不是一个 void。在末尾
添加一个return 0;
如果您唯一要避免打印的是最后一个\n(和 \t),您可以更改:
printf("\n");
和
if (i < x-1) printf("\n");
这将打印 \n 每次,除了你的循环最后一次运行。仅仅因为循环运行的条件是i<x
,而要打印的换行符的条件是i<x-1
。
就您的标签而言,替换:
printf("%d\t", c);
和:
if (j < x - 1) printf("%d\t", c);
else printf("%d", c);
做你需要的。
也就是说,由于x
是一个常量值,最好将其分配x-1
给那些未使用但已声明的整数之一:
scanf("%d", &x);
a = x -1;
然后,由于您正在检查何时使用此代码打印行的最后一个数字:
if (j < a) printf("%d\t", c);//replaced x - 1 with a here
else printf("%d", c);
您可以放心地假设该else
子句仅适用于每行的最后一个数字,那么为什么不在那里添加换行符呢?
if (j < a) printf("%d\t", c);//replaced x - 1 with a here
else printf("%d\n", c);
总的来说,这会给您以下代码:
#include <stdio.h>
int main()
{
int i, j, k, y, z, x, c, a;
scanf("%d", &x);
a = x - 1;
i = 0;
for(i=0; i<x; i++){
for(j=0; j<x; j++){
c = 0;
for(k=0; k<x; k++){
y = (i+1)*(k+1);
z = (j+k);
c = (z*y)+c;
}
if (j < a) printf("%d\t", c);
else printf("%d\n", c);
}
}
return 0;//ADD A RETURN STATEMENT!!
}
这仍然在最后一行输出之后添加了一个新行。要删除它,也只需编写:
if (j < a) printf("%d\t", c);
else if (i < a) printf("%d\n", c);//check if we're in the last i-loop
else printf("%d", c);//if so, don't print new line
工作完成...我已经尝试过此代码,您可以在此键盘上看到输出