6

ネット上:printf次のように(演算子を使用せずに)2つの数値を追加するために使用します:

main()
{
    printf("Summ = %d",add(10,20))
    return 0;
}

int add(int x,int y)
{   
    return printf("%*d%*d",x,' ',y,' ');
}

これがどのように機能するか、誰でも説明してください:

return printf("%*d%*d",x,' ',y,' ');

注: 次のように「sum」を呼び出すと、これは失敗します。

sum(1,1) or sum(3,-1) 
4

3 に答える 3

8

ここには 2 つの中心的な概念があります。

  1. printf()印刷された文字数を返します。
  2. %*d書式指定子は引数printf()から 2 つの整数を読み取り、最初の数値を使用して、2 番目の数値を (10 進数として) 書式設定するために使用されるフィールド幅を設定します。

したがって、実際には、追加される値がフィールド幅として使用されprintf()、合計が返されます。

d現時点では、スペース文字の実際のフォーマットについてはわかりません。それは奇妙に見えますが、代わりに空の文字列を使用していたでしょう:

static int sum(unsigned int a, unsigned int b)
{
    return printf("%*s%*s", a, "", b, "");
}

int main(void)
{
    unsigned int a = 13, b = 6;
    int apb = sum(a, b);

    printf("%d + %d = %d?\n", a, b, apb);

    return 0;
}

上記は機能し、合計を として適切に計算し19ます。

于 2013-08-26T13:17:27.077 に答える
2

printf印刷された文字数を返します。

ここでは、書式文字列を使用して、 +スペースaddのみで構成される文字列を生成する関数で使用されます。1020

したがって、printf関数内のaddは を返し30ます。

次に、この結果を単純に printf で出力します (彼の主な目的)。

注: 明らかかもしれませんが、このprintf使用法は避ける必要があります。無駄な出力を生成するため、非常に汚れています。想像してみてください: add(10000,10000)...

于 2013-08-26T13:19:53.097 に答える
1

まず、printf印刷する文字数を返します。

2 番目に、書式指定子%*d*は、印刷される文字の最小数を意味しますが、幅は書式文字列自体からではなく、追加の引数からのものです。

すべて一緒に、仕事は終わりましたが、フォーマット指定子1のような小さな数字ではうまくいきません%d。より良い解決策は次のようになります:

("%*c%*c", a, ' ', b,' ');
于 2013-08-26T13:16:41.820 に答える