数当てゲームの作成

[戻る]
T 2005/05/26(木) 20:32:56
数当てゲームを作成するに当たって一部、どうしてもわからない点があります。

プログラムの途中からしか書きませんが、↓のプログラムは一応、for文の中にあり、且
つif文の一部です。
numは、自分が入力する数で、answerはコンピューターが出す数です。

数当ては、5回まで挑戦できることになってます。
問題は、そこでです。
5回目ではなく、1〜4回目で正解した場合、その次に「何を入力しますか?」という
のが表示されずに、あくまで正解した時点でビルドを終了させるには、プログラムの方
に何と書き込めばいいのでしょうか?

一応、正解した場合のプログラムがこれです。
else if (num==answer)
 printf("%dで正解",answer);
ここに何を付け加えればいいでしょうか?

T 2005/05/26(木) 20:36:37
いまいちわかりにくい文章になったような気がするので補足しておきます。

要は、ビルドして、数当てに正解した時点で、その次に「n回目は何を登録します
か?」という表示が出ないようにしたいのです。

そんなふうに正解の時点で完全に終わらせるために、付け加えるべきソースプログラム
を教えて下さい。

まきじ 2005/05/26(木) 20:41:48
>正解した時点でビルドを終了させるには

ビルドじゃなく、プログラムではないでしょうか?
break とかをお調べになってみてはどうでしょうか?

Ban 2005/05/26(木) 22:16:03
つくりにもよりますが、ビルドの終了=プログラムの終了なら、

この標準ヘッダをインクルードして、
#include <cstdlib>

この標準関数で抜けるとか。
std::exit(EXIT_SUCCESS);


# プログラムが終了しますので、終了処理には注意してください。

T 2005/05/26(木) 22:27:19
まきじさん、アドバイスありがとうございます。

しかし、この場合にbreakを入れるとエラーが出ました。どうやら他の手を使うしかない
ようです。

とりあえず全プログラムを書くと、こんな感じです。
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
main(){
 int i;
 int answer;
 int num;
 srand((unsigned)time(NULL));
 answer=rand()%100;

for(i=0;i<5;i++){
    printf("数字を当てて下さい%d回目",i+1);
    scanf("%d",&num);

if(num<0||num>100)
    printf("そんな数字はない。");
else if(num==answer)
    printf("%dで正解",answer);
else if(num>answer)
    printf("大きすぎる");
else 
    printf("小さすぎる");
}
   printf("正解は%d",answer);
}

さて、どこをどうすれば、正解した時点でゲーム終了にできるでしょうか?




さて、どこをどうすれば、正解した
時点でゲームを終わりにできるでしょうか?

iijima 2005/05/26(木) 22:48:34
> しかし、この場合にbreakを入れるとエラーが出ました。

どこにbreakを入れて、どんなエラーが出たのですか?
そのプログラムなら、正解の時点でbreak文によってforループを抜ければ良いはずで
す。

reshia 2005/05/26(木) 23:23:26
# 本題とは関係ない話ですが・・・
> if(num<0||num>100)
この条件がおかしいです。
元々、answerは、
> answer=rand()%100;
で決められているので、0〜99の値を取るはずです。
ですので、このif文は、
> if(num<0||num>=100)
とするべきでしょう。

それと、forの中身に関して、
> for(i=0;i<5;i++)
とするよりも
for(i=1;i<=5;i++)
として、
> printf("数字を当てて下さい%d回目",i+1);
を
printf("数字を当てて下さい%d回目",i);
とする方が自然に思えます。
こっちは、ちょっと宗教くさい話ですが。

T 2005/05/27(金) 00:06:56
iijimaさんへ
>どこにbreakを入れて、どんなエラーが出たのですか?
else if (num==answer)
 printf("%dで正解",answer);
の後ろに、breakを入れてビルドしようとするとエラーが出ました。
要するに、実行自体できなかったわけです。

どうするべきなんでしょうかね?

まきじ 2005/05/27(金) 00:15:55
{ } で囲ってないので?

T 2005/05/27(金) 00:25:42
まきじさん、
breakを{}で囲むということですか?

Blue 2005/05/27(金) 00:33:02
(複合文の形式)
http://www9.plala.or.jp/sgwr-t/c/sec06-1.html
を参考にしてください。

2005/05/27(金) 10:03:13
処理が一つなら {} でくくらなくてもよい
if( a==b )
    printf("ABC") ;

処理が複数ある場合はくくらないとダメ
if( a==b ){
    printf("ABC") ;
    printf("DEF") ;
}

ってことでは?

PATIO 2005/05/27(金) 10:46:26
うーん、言語の入門書を再確認したほうがいいと思います。
この辺の文法はきっちり押さえとかないとプログラムできないです。

T 2005/05/30(月) 22:06:08
ここまでアドバイスしてくださった方々、どうもありがとうございました。
ここまでの疑問はとりあえず納得できました。

あとですが、
数当てゲームを作る際、コンピューターの数より大きい場合と小さい場合の範囲は、
「かなり大きい」「やや大きい」などと、できるだけ多くの場合に分類しなければなら
ないんでしょうかね?

まきじ 2005/05/30(月) 23:09:37
あなたが好きな様にしてください。

古いスレッドには追加発言できません。