2016-10-21 15 views
1

[OK]を、私はいくつかのトリックを理解してくださいしようと、コードを少し遊んだし、どのように動作し、私は、このコード奇妙な出力

int i = 8; 
printf("%d", printf("%o", i)); 

結果の出力を理解していませんこれが102であるの、私は私が進システムの8は10であることを知っているか、知りませんが、私は今、この

printf("%d", printf("%o ", i)); 

よう%oの後にスペースを入れたときにどのような最も私を混乱することで、結果は10 3です、ここで何が起こっているのですか?

+5

@ Jean-FrançoisFabre 'printf'が' int'を返します – phoxis

+0

最初に 'i'を印刷すると、' i'の印刷結果が出力されます。 'printf'のドキュメントを見て戻り値を確認しましたか? – molbdnilo

+0

@ Jean-FrançoisFabre、no、printfは、書き込まれた文字の総数を返します。 –

答えて

5

Printfは標準出力に出力し、intを出力します。 だから、あなたが得る:ある

10進8

と3を印刷して評価インナーのprintf、 "リターン" を印刷し、評価外のprintfであります内部printfの値= 3の印刷された文字。

5

外側のprintf()は、内側の戻り値を出力しますprintf()

引用C11、章§7.21.6.1、

fprintf機能は、送信された文字の数、または負の値 出力または符号化エラーが発生した場合を返します。

したがって、最初のケースで、

printf("%d", printf("%o", i)); 

コールおよび外側printf()プリントその戻り値である内printf()プリント10、すなわち、2つの文字、。隣接する2つの印刷ステートメントの出力は、102と表示されます。

printf()の書式指定子に後ろにスペースを入れると、10 <space>の後に3が印刷されて3が返されます。

+0

ああ、私は見るので、10の後の数字は実際に印刷された文字の数であり、スペースカウントでさえ、私は今理解しています。 – TheNemesis584

0
int i = 8; 
printf("%d", printf("%o", i)); 

printf10を印刷するための2であり、それは印刷された文字の量を返します。評価の順序は、出力として102を取得することを意味します。または10と入力し、次に2の間に改行またはスペースを入れないでください。 2番目の例では

は、あなたが10を取得(スペースに注意してください)、その後3printfからのリターンとして(10は3つの文字、{'1','0',' '}です)。