-1

我试图防止在每行输出的末尾打印一个尾随标签。我怎样才能做到这一点?

其余代码按我的需要工作

#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");
    }
}
4

2 回答 2

3

和分别是制表符和换行符转义序列,所以\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

工作完成...我已经尝试过此代码,您可以在此键盘上看到输出

于 2013-11-14T13:20:18.020 回答
1

\t表示制表符,\n表示换行。这些被称为转义序列

于 2013-11-14T13:19:08.250 回答