-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");

すべて一緒に、新しい行を緩めるために...簡単
余談ですが、なぜ2番目を宣言しているの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関数のシグネチャは (正しく) メイン関数が void ではなく int を返す必要があることを示しています。最後
に a を追加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);

必要なことだけを行います。
とは言っても、は定数値であるため、未使用でまだ宣言されている int の 1 つ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 に答える