プロが教えるわが家の防犯対策術!

#include <stdio.h>

#define NUM_CHARS 9
#define KINDS_NUMBERS 26
#define MAX_CHANCES 6
int main(void){
char input; /*** inputはユーザ入力***/
/***correctは正解.ここで具体的な正解も設定する***/
/***ここに何か書く***/
char yomisute; /*** 読み捨て用 ***/
int i; /*** iはループを回すため*/
int hits=0; /*** 正答回数,0に設定 ***/
/*** currentは解答状況表示用,後で%sを用いて表示する ***/
/***ここに何か書く***/
int mistakes=0; /*** ミスを数えるため ***/
int prev_hits; /*** 不正解判定のために、前の正解回数を記憶 ***/
int already[KINDS_NUMBERS]; /*** 既にタイプしたことのある数を扱う ***/

/***解答状況表示用配列の各要素を'?'に設定 ***/
/***ただし,後で%sを用いて表示できるようにする***/
/***ここに何か書く***/

/*** 配列alreadyの全要素を0に設定 ***/
for(i=0;i<KINDS_NUMBERS;i++){
already[i]=0;
}

while(1){
printf("Word: ");
/*** 解の表示 ***/
/*** NUM_CHARS個の正解がまだ当てられていない場合には ***/
/*** currentの全要素が'?'になっている。***/
/*** そうでなければ(当てられていれば)、***/
/*** 正解と同じ文字になっている。***/
/*** %sを用いてcurrentを表示する ***/
/***ここに何か書く***/
printf("Your chances: %d\n", MAX_CHANCES-mistakes);/*** 残されたチャンス数の表示 ***/
printf("Already typed keys:");/*** 既にタイプした文字を表示 ***/
/*** ループ中で配列alreadyの要素を適切に書き換えてあるので ***/
/*** 配列alreadyの要素が1のときにその添字に対応する文字を表示すれば良い ***/
for(i=0;i<KINDS_NUMBERS;i++){
if(already[i]==1){
printf("%c, ",i+'a');
}
}
printf("\n");
printf("Guess a word by %d characters from a to z.: ", NUM_CHARS); /*** 設問表示 ***/
scanf("%c", &input); /*** ユーザ入力 ***/
scanf("%c", &yomisute); /*** 読み捨て ***/
printf("\n");

if(already[input-'a']==1){
printf("Character you typed had already typed.\n");
}

else{
already[input-'a']=1;
prev_hits=hits;
for(i=0;i<NUM_CHARS;i++){
if(input==correct[i]){
current[i]=correct[i];
hits++;
}
}
if(prev_hits==hits){
mistakes++;
}
if(hits==NUM_CHARS){
printf("Bingo!\n");
break;
}
if(mistakes==MAX_CHANCES){
printf("Sorry, the correct word is ");

printf("\n");
break;
}
}
}
return 0;
}

上のプログラムにおいて、「input-'a'」とはどのような意味ですか?ご教授ください。

教えて!goo グレード

A 回答 (2件)

already は要素番号 0 ~ 25 の配列です。



input には a ~ z の 26文字を入力できます。

input - 'a' は ASCIIコードで減算しています。

input が 'b' なら、'b' - 'a' = 98 - 97 = 1 となります。
    • good
    • 0

char型の変数 input から 文字 'a' を引いています。



文字もメモリ上では数値と同じビットで情報を持っています。
input の中身が 'c' だったとしたら、input-'a' は 2です。
つまり、'a'から何番目なのかを求めることができます。

コードの中身はよく読んでいませんが、collect[i]とかcurrent[i]などの配列位置を求めるのに使っているのではないでしょうか。
    • good
    • 0

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

教えて!goo グレード

人気Q&Aランキング