+
演算子を使用せずに2つの数値を加算すると、次のコードが見つかりました。演算子を使用せずに2つの数値を加算する
3と4を追加するコード:
printf("%d",printf("%*c%*c",3,' ',4,' '));
今printf()
は結果 の文字数を返し、%*c
それが遭遇したことを次の文字を無視します。しかし、私はこのコードを理解することができません。どんな助けもありがとう。
+
演算子を使用せずに2つの数値を加算すると、次のコードが見つかりました。演算子を使用せずに2つの数値を加算する
3と4を追加するコード:
printf("%d",printf("%*c%*c",3,' ',4,' '));
今printf()
は結果 の文字数を返し、%*c
それが遭遇したことを次の文字を無視します。しかし、私はこのコードを理解することができません。どんな助けもありがとう。
printf("%*c", n, c)
は、文字c
,n
回を表示します。したがって、コードは3つのスペースとそれに続く4つのスペースを出力し、printf
は明らかに3 + 4の問題を解決する文字数を返します。
実際には、 'n 'のフィールド幅に右寄せされた文字' c'をスペースで埋めて印刷します。 (あなたの答えが示唆するように 'c'のコピーで埋められない) –
printf
は3と4のスペースを出力し、7の文字数を返し、外側のprintf
がその結果を出力しています。
標準のルールを指定するためにこの回答を追加しています。
戻り値printf
を利用しています。それぞれ3-1
個のスペース(' '
)を入力してから、指定したとおりにスペースをもう一度入力し、4-1
個のスペースをもう一度入力してください。そして、書き込まれた文字の総数が返されます。それが合計の仕組みです。
私はちょうど
printf("%*c",X,C) prints the char C in a field of size X
このルールを覚えているすべてのこれらの行動は、C11標準で説明されています。標準 §7.21.6.1p4
から
オプションの最小フィールド幅。左側の変換値がフィールド幅より少ない 文字が含まれている場合、それは(デフォルト)スペースが埋め込まれているに に(または右は、後述する左調整フラグ場合、 が与えられています)フィールド幅。 フィールドの幅は、 アスタリスク(後で説明)
*
または非負の10進整数の形式をとります。
同じセクションに §7.21.6.1p5
上述したように、フィールド幅、または精度、またはその両方が、 は、アスタリスクによって示されてもよいです。この場合、int引数は
fprintf
関数は文字数が、又は 負の値を送信し返す最後§7.21.6.1.p14でフィールド幅または精度を供給する出力またはエンコーディングエラーが発生した場合
(あなたがフィールドのアイデアを得るように私はここに%d
を使用しています)この例では、十分に良いだろう、あなたのアイデアをオフにします。
x = 10
とy=2
場合、それは、コードはまた、いくつかの重要な副作用を有することがより明確に
| | | | | | | | |1|0| |2|
1 2 3 4 5 6 7 8 9 10 \ \
11 12
That's how 12 characters are printed.
になります。 –
私が知っている副作用は、入力として得られるスペースの数に従って出力をシフトすることです。他に何か ? – Peps0791
しかし、その副作用は大きなものです。あなたは単にそれが追加を行うために奇妙な方法であると言うことはできません。 –