2016-04-05 10 views
-1

char形式指定子を使用して整数の数字を出力しようとしています。char型の文字を使用してint型を出力しない

これは、私は現在、

//counter = arbitrary int 
    while (counter > 0) { 
      char c = (char)(counter % 10); 
      printf("%c", c); 
      counter/=10; 
     } 

これを持っているものだけで空白プリントアウトしているが、私は型キャストをint型が、残すようにフォーマット指定を変更した場合、それが正しい値を印刷します。このような何か

char c = (char)(counter % 10); 
    printf("%d", c); 

私はchar形式指定子を使用するとき、これがなぜ印刷されないのですか?

+3

'(カウンター%10)' - '(カウンター%10 + '0')' – BLUEPIXY

+0

ありがとうございます!これは働いた –

+0

それは印刷していますが、文字コード '1'はControl-A、2はControl-Bなどとして知られています。 8はバックスペースです。 9はタブです。それらはすべてデフォルトで表示されない制御文字です。 –

答えて

1

%cは、数字ではなく文字を印刷するためのものです。数字を印刷する場合は%dを使用する必要があります。 charで動作する理由は、charがvariadic関数の引数として暗黙的にintに渡されるためです。

例えば、c'A'を含有し、あなたがそれをフォーマットする%cを使用した場合は、A ’手紙‘になるだろうが、あなたは%dを使用した場合、あなたはその整数値になるだろう65.

あなたは絶対に%cを使用する必要がある場合は、あなたが印刷前の文字に'0'の値を追加することができ、EGL

printf("%c", c + '0'); 
+0

ええ、 '%c'は文字のためのものですが、文字指定子を使用する必要があります。 –

+2

@VincentLe:無関係な答えを提供する時間を無駄にしないように、あなたの投稿にこれを言及する必要があります。 – dreamlax

0

%c+'0'がにそれを向けるだろうprintf("%c",c+'0')として、この文脈で使用することができます整数相当のcです。

+0

'+ '0' 'は数字の*相当のASCII文字値を提供します* ...参照:[** ASCII Table.com **](http://www.asciitable.com)。 –

+0

実行文字セットが実際にASCIIであるかどうかにかかわらず、文字値。 –

関連する問題