
#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'」とはどのような意味ですか?ご教授ください。
No.1ベストアンサー
- 回答日時:
already は要素番号 0 ~ 25 の配列です。
input には a ~ z の 26文字を入力できます。
input - 'a' は ASCIIコードで減算しています。
input が 'b' なら、'b' - 'a' = 98 - 97 = 1 となります。
No.2
- 回答日時:
char型の変数 input から 文字 'a' を引いています。
文字もメモリ上では数値と同じビットで情報を持っています。
input の中身が 'c' だったとしたら、input-'a' は 2です。
つまり、'a'から何番目なのかを求めることができます。
コードの中身はよく読んでいませんが、collect[i]とかcurrent[i]などの配列位置を求めるのに使っているのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
C言語において、 配列要素をひ...
-
5
C言語 ファイルの指定された行...
-
6
C言語の2次元配列 容量が大き...
-
7
配列のアドレス部
-
8
char gyou[1024];でcharの表現...
-
9
AfxBeginThread の引数について
-
10
.NET C++で、構造体の配列をnew...
-
11
C言語 数値の連続入力について
-
12
C言語で重複組合せを全列挙
-
13
C#で構造体の配列を持った構造...
-
14
C#で配列が空かを判定するには?
-
15
配列の要素数に変数を入れたい...
-
16
Cのエラー
-
17
このプログラムどこがおかしい...
-
18
C言語の配列のコピーについて
-
19
[C++]const int と配列
-
20
C言語についてです 5人のテスト...
おすすめ情報
公式facebook
公式twitter