2015-10-21 6 views
5

printf%*c%*cのprintfを使用すると、4つの値が必要ですが、4と5の合計も表示されます。正当な理由が見つかりませんでした。`printf`の%* c%* cとは何ですか?

調査すると、%*cは幅を示しています。しかし、幅はどのくらいで、下の例の和はどうして得られますか?

printf("%*c%*c", 4, ' ', 5, ' '); 

Ideone link

コード:

#include <stdio.h> 

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

int main() 
{ 
    printf("%d",add(4,5)); 
    return 0; 
} 
+0

あなたの投稿にサンプルコード全体と出力を加えてください - この場合は、答えが重要です! – usr2564301

+1

あなたは[a 'printf'(および家族)のリファレンス](http://en.cppreference.com/w/c/io/fprintf)を読んでみたいですか? –

+0

ああ、あなたが私たちに示す 'printf'呼び出しは9桁のスペースを表示します。 –

答えて

5

printf("%*c%*c", 4, ' ', 5, ' '); 9文字のだから合計サイズ5の分野における空間続いサイズ4のフィールド内のスペースを出力します。あなたの投稿をコードで

、関数が印刷された文字の数を与えるprintfの結果を返し、そう9.メインにあなたがして期待通り、この数9

6

printf印刷された文字の数を返します。文字C.続い

printf("%*c", N, C);N-1印刷ブランク

より一般的には、printfプリントN - length_of_text空白文字が続く(その数は> 0、ゼロブランクそうでない場合)。同じことが数字にも当てはまります。

従って

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

次いでyために同じことを行い、xマイナスlength_of_space他の空間(x-1)付いスペースを印刷します。それは4+5あなたのケースのスペースになります。次いでprintfが印刷された文字の総数を返し

printf("%d",add(4,5)); 

9.このprintfプリントadd()関数によって返された整数、デフォルトで9

printfは右揃えです(空白文字の前)。どちらか

  • 与える負N、または
  • *、例えば前-を追加し、それはが-aligned左にするには、または
  • 静的バージョンも同様に機能します。 %-12s%-6d
+1

いいえ、printf( "%* c"、N、C) 'は、サイズNのフィールドにchar Cを表示します。 –

+0

そうです - 私は'%XY 'を約10万回使用しました。最初は「N回」... –

1

すべてがある印刷します。 manual

フォーマット
(オプション)によります。その後に整数または*、またはどちらも変換の精度を指定します。*を使用する場合、精度はint型の追加引数で指定します。この引数の値が負の場合、無視されます。数も*も使用されていない場合、精度はゼロとみなされます。精度の正確な影響については、下の表を参照してください。

戻り値
1-2)、エラーが発生した場合の成功または負の値ならば書かれた文字の数。だからあなたの場合

:結果

int add(int x, int y) 
{ 
    return printf("%*c%*c",x,' ', y,' '); 
    //   ^x is for the first *, y for the second * 
} 

、戻り値で書かれた、(精度を含む)空間のx + y数。

関連する問題