• ベストアンサー

C言語の質問です

下記のプログラムは数字の0から9を意味する英単語の文字列テーブルを作成し、それからユーザーに(文字として)数字を入力させ、このテーブルを使って該当する単語を表示するものです #include <stdio.h> #include <conio.h> int main(void) { char digits[10][10] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; char num; printf("数字を入力してください: "); num = getche(); printf("\n"); num = num - '0'; if(num>=0 && num<10) printf("%s", digits[num]); return 0; } num = num - '0' とするのが分かりません。 使っている本には、ヒントとして 『入力された文字から'0'を引けば、テーブルのインデックスが得られます』とありますが、これもよく分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.2

num = getche(); で入力されるのは文字としての数字です。 "0"なら30H(48)になります。 "0"から"0"を引くと当然 0 になります。 "1"なら31H(49)になりますから、同じように"0"を引くと 49-48=1 となり、"1"を入力したときのインデックス 1 が得られます。 同じように"9"までの配列なので、"0"を引くことでテーブルのインデックスが得られるのです。 判ります? 因みに、 文字 16進数 10進数  0   30H   48  1   31H   49  2   32H   50  3   33H   51  4   34H   52  5   35H   53  6   36H   54  7   37H   55  8   38H   56  9   39H   57

Guchiken
質問者

お礼

回答ありがとうございます!! インデックスを得るために文字コードが連続しているのを利用して'0'(10進でいう48)で引いていたんですね。判りました! 回答ありがとうございました!!

その他の回答 (2)

回答No.3

文字コードというのをご存知でしょうか? アスキーコードというルールに従うと 以下のように決まっているんです。 0という文字 --> 48番 1という文字 --> 49番 2という文字 --> 50番 3という文字 --> 51番 4という文字 --> 52番 5という文字 --> 53番 6という文字 --> 54番 7という文字 --> 55番 8という文字 --> 56番 9という文字 --> 57番 なので、あなたがキーボードから '5' を入力しても コンピュータはそれが数値の 5ではなく 53 と認識しているということです。 つまりその数値から '0' (48)を引くとその数字に対応する 数値が得られるということです。 例えば '5'は 53です。これから 48を引くと初めて 数値の 5 が得られるということです。

Guchiken
質問者

お礼

回答ありがとうございます 文字コードの存在は知っていて、アルファベットは連続してならんでいることは知っていました。数字については知りませんでした。アスキーコードの存在に気がつかなかったのは落度でした… 回答ありがとうございました!!

  • agricap
  • ベストアンサー率40% (79/195)
回答No.1

'0'は、「0」という文字の文字コードです。 具体的には10進数でいうと48です。 一方で、numは、やはり入力した数字の文字コードです。 0・・・48 1・・・49 2・・・50 (途中省略・・・・・・・・) 9・・・57 です。 ここで、0から9までの文字コードが連続しているところがミソです。 これが連続しているから、入力した数字の文字コードと、0の文字コードの差を求めると、入力した数字の数値としての値が得られることになります。 同様にa~z、A~Zなんかも文字コードが連続しているので、同様の手法はよく使います。

参考URL:
http://e-words.jp/p/r-ascii.html
Guchiken
質問者

お礼

回答ありがとうございます! 文字コードが関係してたんですね!気が付きませんでした! 文字として入力した数字の文字コードから'0'、つまり48引いて、インデックスとして使っているんですね。 回答ありがとうございました!!

関連するQ&A

専門家に質問してみよう