ページ 11

C言語入門3章サンプルプログラム

Posted: 2013年11月25日(月) 23:32
by 美羽=古王
初めまして。
自分は今、C言語入門でC言語を勉強しています。
3章の数当てゲームをプログラミングし、解答を見たのですがよく解らない所があるのです。

コード:


#include <stdio.h>

void main(){
	int seikai = 1484;
	int count;
	int inp = -1;

	for ( count = 1 ; count <= 10 ; count++ ){
		inp = -1;
		while( inp < 0 || inp > 9999 )
			scanf("%d", &inp);

		if ( inp == seikai ){
			printf("%d回目で正解ですね\n", count);
			break;
		}
		if ( inp < seikai )
			printf("小さい\n");
		else
			printf("大きい\n");
	}
	if ( inp != seikai )
		printf("10回で正解しませんでした。ゲームオーバー\n");
}






解らない所ですが
1:何故inpを-1に定義するのか。
2:何故最後の部分、10回でゲームオーバーするのか。

相談に乗っていただければ幸いです。

Re: C言語入門3章サンプルプログラム

Posted: 2013年11月25日(月) 23:33
by 美羽=古王
#include <stdio.h>

void main(){
int seikai = 1484;
int count;
int inp = -1;

for ( count = 1 ; count <= 10 ; count++ ){
inp = -1;
while( inp < 0 || inp > 9999 )
scanf("%d", &inp);

if ( inp == seikai ){
printf("%d回目で正解ですね\n", count);
break;
}
if ( inp < seikai )
printf("小さい\n");
else
printf("大きい\n");
}
if ( inp != seikai )
printf("10回で正解しませんでした。ゲームオーバー\n");
}

すいません、何故か一行になりました。本当のプログラムはこちらです

Re: C言語入門3章サンプルプログラム

Posted: 2013年11月26日(火) 00:11
by K_Tarou
初めまして、拙いながらも説明させて頂きます。
※すみません、変な所があったので訂正いたします。

1の回答:
11行目のwhile文の条件が " inpが0より小さい、またはinpが9999より大きい "となっていて、
キーボードからの入力が、この条件の範囲から脱するまで(inpが0~9999の範囲に収まるまで)繰り返しwhile文で入力させることになります。
一番最初にキーボードから入力してもらうために、わざと上記の範囲外の値を設定しているということなのでしょう。


2の回答:
9行目のfor文は、条件(ここではcountが10以下という条件)を満たしている間、for文の中の処理、つまり、9行目~22行目を繰り返し続けます。
22行目の処理が終わった後に、9行目に戻って条件文の "++count" で count を1足していき、最終的に count が10になったら繰り返しを抜けることになります。

繰り返しを抜けたら23行目のif文を処理しますが、この行を処理しているということは、先程のfor文を抜けているということなので count が10になっていることになります。
この時に、if文の条件式で ユーザーの解答(inp) が 正解の数(seikai) と一致していないかを判定して、一致していないということは
10回目の解答で正解できなかったということになり、24行目の処理が行われてゲームオーバーということです。


拙い説明ですみません、理解していただけたでしょうか?

Re: C言語入門3章サンプルプログラム

Posted: 2013年11月26日(火) 01:15
by 美羽=古王
解りやすく、しかも丁寧に教えていただきありがとうございます。おかげさまで、理解出来るようになりました。
拙いなんてとんでもありません。こちらは嬉しい限りです。ありがとうございました。

Re: C言語入門3章サンプルプログラム

Posted: 2013年11月26日(火) 22:05
by へにっくす
美羽=古王 さんが書きました:すいません、何故か一行になりました。本当のプログラムはこちらです
IE10をお使いではありませんか?
こちら参照。
http://dixq.net/forum/viewtopic.php?f=3&t=13306