dポイントプレゼントキャンペーン実施中!

下記のプログラムは数字の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'を引けば、テーブルのインデックスが得られます』とありますが、これもよく分かりません。

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 14:43

文字コードというのをご存知でしょうか?


アスキーコードというルールに従うと
以下のように決まっているんです。

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 が得られるということです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 14:52

'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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!