ページ 11

変数同士の比較がうまくいきません。

Posted: 2016年3月19日(土) 20:55
by Alan
始めて質問させていただきます。
プログラミング初心者で、コードのどこが間違っているのかよくわかりません。
具体的にはヌメロンという、コンピューターの作成した三桁の乱数をプレイヤーが当てていく数当てゲームで、
1.コンピューターが答えの数を決定
2.プレイヤーが数を提示して質問
3.プレイヤーの数字のうち1つが答えに含まれていれば1バイト、位置も同じなら1イートとして表示
4.3イートなら終了、でなければ2へ
という流れです。イートはバイトに含まれません。
コードはこんな感じです。実際には答えの数は表示しません。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sol(int num);
int ask[3];

int main(){
	printf("コンピューターが出題する三つの数字を当ててください。\n");
	//答えの決定
	int ans[3], eat = 0, bite = 0, i,n = 0;
	srand((unsigned int)time(NULL));
	rand(); rand(); rand(); rand(); rand();
	do{ ans[0] = rand() % 10; } while (ans[0] == 0);
	do{
		ans[1] = rand() % 10;
	} while (ans[0] == ans[1]);
	do{
		ans[2] = rand() % 10;
	} while (ans[0] == ans[2]||ans[2] == ans[1]);
	printf("%d%d%d\n", ans[0], ans[1], ans[2]);
	//プレイヤーの入力
	int num = 0;
	do{
		bite = 0, eat = 0,n++;
		do{
			printf("三つの違う数字を入力してください\n");
			scanf_s("%d", &num);
			sol(num);
		} while (num > 999 || num < 100);//999より大きいか100より小さかったらループ
		
		//判定
		for ( i = 0; i < 2; )
		{
			if (ans[i] == ask[0] || ans[i] == ask[1] || ans[i] == ask[2])
			{
				bite = bite + 1;
			}
			if (ans[i] == ask[i])
			{
				bite = bite - 1;
				eat = eat + 1;
			}
			i++;
		}
		printf("%d回目:%dイート%dバイト\n", n, eat, bite);
	} while (eat != 3);
	return 0;
}

//プレイヤーの入力
int	sol(int num){
	int let1, let2, let3;
	let3 = (num) % 10;
	let2 = (num / 10) % 10;
	let1 = (num / 10 / 10) % 10;
	ask[0] = let1;
	ask[1] = let2;
	ask[2] = let3;
	return 0;
}
「//判定」のfor文の中だと思います。どうやら百の位の数が無視されてしまっているようなのです。
そのほかのコードも見づらいところがあるかもしれませんが、ご容赦ください。
どうすれば解決できるでしょうか。お願いします。

Re: 変数同士の比較がうまくいきません。

Posted: 2016年3月19日(土) 21:21
by みけCAT
素直に百の位の数も比較するようにすればいいでしょう。

コード:

		for ( i = 0; i < 2; )
という行を

コード:

		for ( i = 0; i < 3; )
にしましょう。

Re: 変数同士の比較がうまくいきません。

Posted: 2016年3月19日(土) 21:45
by Alan
おお!みけCATさんありがとうございます!無事にできました!
インターネットの力ってすごいですね。まさかこんなミスだったとは...
これからはしっかり見直してから質問します。
ありがとうございました!