2011-11-14 11 views
0

値は、それが2(それが必要のような)として値を出力割り当てられていたら、私はvalをプリントアウトした場合、私は私の文字に次の[]Char []の値は印刷されませんか?

int index = 0; 
char i = '5'; 
char q = '7'; 
char val = (i - '0') + (q - '0'); 
array[index] = val; 
++index; 

を追加しています。しかし、それで私のように私のchar配列を印刷すると.. printf("%.*s\n",index,array);何も印刷しませんが空白。なぜこうなった?

+0

これは我々だけでコンパイルして実行するため、 – hugomg

+0

にコピーして貼り付けることができ、完全なプログラムにコードを拡大した場合に大いに恩恵を受けられる質問の一種であります?私はvalをフォームフィード文字0x12にする。 –

+0

@MartinJamesは '0x12'ではなく10進数' 12'です。 –

答えて

0

printfは文字列ですが、値は印刷可能なASCII値ではありません。

1

配列に入れた番号に「0」を追加していない(NULターミネーターも追加していない)ので、文字セット内に値12あなたが使用している次のバイトまで他の内容のメモリが含まれている可能性があります)。

ASCII文字セット(およびUnicodeなどの派生文字)では、文字12は改ページ文字です。 ASCIIを理解しているプリンタに入力した場合、おそらくそのページが取り出され、次のページに印刷された後のテキストになります。しかし、画面上では、あまり意味がないので、通常は空白(またはスマイリーな顔などの特殊文字)として表示されます。

0

これは、値12を出力することを意味すると仮定すると、ASCII文字セットで文字番号12を印刷しようとしていることを意味します。その文字(http://www.asciitable.com/)は印刷できない文字です。

(実際には2も同じです)。

0

数値は誤っている可能性があります。この値は印刷可能な文字として誤解されている可能性があります。

例えば、xが値2があります

char ch = 7 - 5; 

を...しかし、chは、あなたがCHの値が印刷可能になりたい場合は、あなたがそれを再度追加する必要があり、印刷できない文字2ですが値は '0'です。

char ch = x + '0'; 

数値が9を超える場合は、数値を文字列に変換するために、より複雑なアルゴリズムを使用する必要があります。

0

フォーマット文字列"%.*s"には2つの引数が必要です。 1つはで、印刷する最小幅(ケースではindex(ゼロ))と、もう1つはデータそのもの(char*)です。

結論:プログラムはゼロ文字を印刷することによって正しく動作しています。

1

各ASCII文字には整数値があります。文字を印刷するとき、下敷きシステムはcharの値をチェックし、対応するASCII文字を印刷します。値自体は印刷されません。参考までにASCII tableを参照してください。

char var = '7'; // var's value is actually 55. 
char other = 55; // This is same as '7' 

あなたのケースでは、2つの文字の合計を計算する「5」と「7」、あなたは文字を減算する必要が「0」それらから変換するために「5」と「7」の数字に5および7。

char first = '5' - '0'; // Is actually 53 - 48 = 5 
char second = '7' - '0'; // Is actually 55 - 48 = 7 
char result = first + second; // 5 + 7 = 12 

// When you print result, you will not see "12" printed. Instead you see a form feed special character. 

char test = '5' + '7'; // 53 + 55 = 108, which is letter 'l' 

あなたは、実際の値を印刷した文字列にcharの値を変換する必要があります。 itoa()に変換できます。

char result = ('5' - '0') + ('7' - '0'); 
char buf[5]; 
memset(buf, 0, sizeof(buf)); 

itoa((int)result, buf, 10); 
printf("%s\n", buf); 
関連する問題