我正在尝试阻止在每行输出的末尾打印一个尾随制表符。 我怎么能这样做?
其余的代码按照我需要的方式工作
#include <stdio.h>
int main()
{
int i, j, k, y, z, x, c, b, a, C;
scanf("%d", &x);
for(i=0; i<x; i++){
for(j=0; j<x; j++){
int c = 0;
for(k=0; k<x; k++){
y = (i+1)*(k+1);
z = (j+k);
c = (z*y)+c;
}
printf("%d\t", c);
}
printf("\n");
}
}
答案 0 :(得分:3)
\t
和\n
分别是制表符和换行符,所以更改
printf("%d\t", c);
到
printf("%d", c);
删除标签,然后删除
printf("\n");
总而言之,要松开新线......容易
作为一个助手:为什么你宣布第二个int c
?你的代码首先声明一堆int,其中一些是你不使用的:
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,而不是一个空格。
最后添加return 0;
如果您唯一想要避免打印的是 last \ n(和\ t),您可以更改:
printf("\n");
与
if (i < x-1) printf("\n");
每次都会打印\ n,但循环运行的 last 时间除外。只是因为循环的条件是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
已完成工作......我已尝试使用此代码and you can see the output on this codepad
答案 1 :(得分:1)
\t
表示标签,\n
表示新行。这些被称为escape sequences。