数当てゲームの作成 – プログラミング – Home

通知
すべてクリア

数当てゲームの作成


T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

数当てゲームを作成するに当たって一部、どうしてもわからない点があります。

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

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

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


引用解決済
トピックタグ
T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

いまいちわかりにくい文章になったような気がするので補足しておきます。

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

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


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

>正解した時点でビルドを終了させるには

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

つくりにもよりますが、ビルドの終了=プログラムの終了なら、

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

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

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


返信引用
T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

まきじさん、アドバイスありがとうございます。

しかし、この場合に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
 iijima
(@iijima)
ゲスト
結合: 21年前
投稿: 44
 

> しかし、この場合にbreakを入れるとエラーが出ました。

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


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

# 本題とは関係ない話ですが・・・
> 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
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

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

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


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

{ } で囲ってないので?


返信引用
T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

まきじさん、
breakを{}で囲むということですか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

処理が一つなら {} でくくらなくてもよい
if( a==b )
printf(ABC) ;

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

ってことでは?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

うーん、言語の入門書を再確認したほうがいいと思います。
この辺の文法はきっちり押さえとかないとプログラムできないです。


返信引用
T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
Topic starter  

ここまでアドバイスしてくださった方々、どうもありがとうございました。
ここまでの疑問はとりあえず納得できました。

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


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

あなたが好きな様にしてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました