• 締切済み

数当てゲームを作っているのですが

数当てゲームを作っているのですが 乱数を設定してその値よりも小さい値を入力したら「小さい」、 大きい値を入力したら「大きい」と表示して その値を入力したときは「正解」と表示するような数当てゲームを作っています。 一応コードは書けたのですが、コンパイル、実行がうまくいかないのです。 ご指摘お願いします。 以下コード /* 1~99の乱数を発生させる */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,random; // 乱数の種を植える,種に時間を使う srand((unsigned)time(NULL)); for(i=0; i<1; i++) { //乱数の発生 random = 1 + rand()%99; printf("%d\n",random); } printf("数当てゲームをはじめます。\nコンピュータが当たり数を用意しました。当たり数は1~99の間にあります。\n"); for(;;) { printf("あなたの予想は? > "); scanf("%d",&i); if(i>random) puts("大きい"); else puts("小さい"); break; } if(random - i = 0) printf("正解"); return (0); }

みんなの回答

回答No.2

> 一応コードは書けたのですが、コンパイル、実行がうまくいかないのです。  うまくいかないというのはどういうことを示していますか?  何がうまくいかないのかわからないけど、明らかに間違ってる部分は > if(random - i = 0)  代入文の左辺が演算式になってます。  ま、本当は代入じゃなくて比較なんだろうけど、比較演算子は「=」じゃなくて「==」です。  これを変えればコンパイルは通ると思うけど、期待する動作かどうかは知りません。

全文を見る
すると、全ての回答が全文表示されます。
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

コンパイルが通らないのは、 if(random - i = 0) でしょ? エラーメッセージに行番号が出ると思いますが…。 if(random - i == 0) 比較するなら、「=」2つ。 「random - i」に「0」を代入しようとするからエラーになる。 でも、全体的にループ処理の中が for(;;) { printf("あなたの予想は? > "); scanf("%d",&i); if(i>random) puts("大きい"); else if(i < random) puts("小さい"); else { printf("正解"); break; } とかにしないと、数当てできていないよ?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 数当てゲームについて

    #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int num; int no; int max=11; int limit=0; srand(time(NULL)); /*乱数の値を初期化*/ no = rand() %1000; do{ printf("あと入力回数は%d回です。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>=1000 || num<=-1000) { printf("-999以上999以下の整数を入力してください。\n"); return -1; } if(num>no) { printf("\a大きいです。\n"); } else if(num<no) { printf("\a小さいです。\n"); } }while(no!=num && limit<max); if(no==num) { printf("正解です。\n"); printf("%d回で当たりました。\n",limit); } else { printf("残念です。当たりませんでした。\n"); printf("正解は%dでした。\n",no); } return 0; } これは、0以上999以下の整数を入力させて11回以内にランダムで 入力した値を当てさせるゲームです。 質問内容としては 「0以上999以下」→「-999以上999以下」に変更するにはどうすれば よいかです。 一部、「-999以上999以下」の値を入力してくださいとなっていますが 結局わからずにそのままになっているためです。 よろしくお願いいたします。

  • 数当てゲーム

    たのしいCという本でプログラミングの勉強をしています。 演習問題の解答がないので質問します。 2つの乱数を決定し、x以上y以下の整数を当てるプログラムです。 入力した数に対してヒントがあり、正解よりも小さければ"小さいです"と表示されます。 入力回数の制限を設け、乱数によって適切な入力回数にする計算方法の仕方がわかりません。 0以上1000以下の乱数の場合10回が適切みたいです。 よって0以上2000以下の場合は11回だということだと思います。 下のプログラムは回数の計算はしませんが、x以上y以下の整数を当てるプログラムになっていると思います。 適当な変数の名前や見にくいプログラムですいません。 /* 課題1-3 */ #include <time.h> #include <stdio.h> #include <stdlib.h> #define MAX_STAGE 11 /* 最大入力回数 */ int main(void) { int i; int no1; /* 範囲1 */ int no2; /* 範囲2 */ int max; /* 大きい乱数 */ int min; /* 小さい乱数 */ int y; /* 当てさせる数 */ int k; /* maxとminの差 */ int stage; /* 入力回数 */ int x; /* 読み込んだ値 */ int xbuf[MAX_STAGE]; srand(time(NULL)); no1 = rand(); no2 = rand(); if(no1 > no2){ max = no1; min = no2; } else{ max = no2; min = no1; } k = max - min; y = min + rand() % (k+1); printf("%d以上%d以下の整数を当ててください。\n", min, max); stage = 0; do{ printf("残り%d回。いくつでしょう:\n", MAX_STAGE - stage); scanf("%d", &x); xbuf[stage++] = x; if(y > x) printf("小さいです。\n"); else if(y < x) printf("大きいです。\n"); }while(y != x && stage < MAX_STAGE); if(y != x) printf("残念でした。正解は%dです。", y); else printf("正解です。%d回目で正解しました。", stage); puts("\n---入力履歴---"); for(i=0; i<stage; i++) printf(" %2d : %4d %+4d\n", i+1, xbuf[i], xbuf[i] - y); return (0); } 自分が考えた入力回数の設定は、kの値をif文で場合分けして入力回数を決定するという方法が思いつきました。他に何か良いアイデアとかってあるのでしょうか。 また、ごちゃごちゃと文を書いているので改善点などもあればよろしくお願いします。

  • C言語で数当てゲーム

    私は最近5月からCのプログラミングを学び始めた中3なんですが じゃんけんゲームと丁半ゲームを今までに作りました で今回数当てゲームを作ってみたのですが何回作り直しても エラーが出ます(コンパイラのエラーではなくWindows?のエラーのようなもの) じゃんけんゲームなどと同じように作ったつもりなのですが・・・・ どうなっているのでしょうか? ソースは↓です #include <stdio.h> #include <time.h> #include <stdlib.h> #include <conio.h> int main() { int kazu,i,x; printf("数当てゲーム!!\n"); srand(time(NULL)); x=0; i=0; do { kazu=rand()%9+1; printf("数を入力してください(1~9)\n"); scanf("%d",i); if(i<10){ if(i==kazu) { printf("当たり!!\n続けるなら0やめるなら0以外を入力"); scanf("%d",x); } else {printf("残念・・・はずれ\n続けるなら0やめるなら0以外を入力"); scanf("%d",x);} } else {printf("入力ミスです\n続けるなら0やめるなら0以外を入力"); getch();} }while(x==0); return 0; } 一応コンパイラのエラーは出ていないのですが・・・ 初心者なのでわかりません。 どこが原因なのか詳しくおしえてください

  • 数当てゲームについて(べき乗のあらわし方)

    #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int limit=0; int no1,no2,no3; /*当てさせる値*/ int num; /*入力する値*/ int max=15; srand(time(NULL)); no1=rand(); no2=rand(); if(no1>no2) { do{ no3=rand()%(no1+1); }while(no3<no2); } else if(no1<no2) { do{ no3 = rand()%(no2+1); }while(no3<no1); } if(no1>no2) { if(num<no2 || num>no1) { printf("%d以上%d以下の数字を入力してください。\n",no2,no1); } } else if(no1<no2) { if(num<no1 || num>no2) { printf("%d以上%d以下の数字を入力してください。\n",no1,no2); } } do{ printf("あと%d回入力できます。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>no3) { printf("大きいです。\n"); } else if(num<no3) { printf("小さいです。\n"); } }while(num!=no3 && limit<max); if(num==no3) { printf("正解です。"); printf("%d回で当たりました。",limit); } else { printf("残念ながら不正解です。正解は%dでした。",no3); } return 0; } このプログラムは制限回数以内でランダムで入力した値を 当てさせるものです。 当てさせる数であるランダム値の範囲としましては、ランダムで 二つの値を入力して「小さいランダム値以上大きいランダム値以下」 です。 そして、その範囲内で制限回数以内に当てさせるというものです。 ここで質問なのですが、「制限回数を2のべき乗以内とするにはどうすれば いいのかということです。」 たとえば、 ランダム値が2000と2004が入力されたとしたら、お互いの差は4であり 二分検索法の平均検索回数の式「log2n」というものを使うと2回とするのが 検索回数として妥当であると考えるからです。 当てさせる数が 8以内ならば3 16以内ならば4 32以内ならば5 という形で制限回数が増えていくようにしたいです。 2^n<max<2^(n+1) ^はべき乗をあらわします。 上記のような式ならば、制限回数がn+1になるようにです。 プログラムの中では、制限回数をmaxとしています。 ですが、上記のようなあらわし方がよくわからなかったので、 max=15と暫定的に定めてあるだけです。 長くなりましたが、よろしくお願いいたします。

  • 数字を当てさせるゲームについて

    #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int limit=0; int no; /*当てさせる値*/ int num; /*入力する値*/ int max=9; srand(time(NULL)); no=rand()%1000; do{ printf("あと%d回入力できます。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>no) { printf("大きいです。\n"); } else if(num<no) { printf("小さいです。\n"); } }while(num!=no || limit<max) if(num==no) { printf("正解です。"); printf("%d回で当たりました。",limit); } else { printf("残念ながら不正解です。") } return 0; } これは、0以上999以下の整数を入力させて9回以内にランダムで 入力した値を当てさせるゲームです。 質問内容としては 当てさせる数字を「0以上999以下の数字」→「0以上999以下の3の倍数」に変更するにはどうすればよいかです。 よろしくお願いいたします。

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #include<stdio.h> void maegaki(void); /*このように関数を定義しまくることに意味はあるのか?main関数はすっきりするけど.*/ void in_check_out(int i); int main(void) { int i; int j; maegaki(); for(j=0;j<10;j++) { scanf("%d",&i); in_check_out(i); if(!(i-1)) return 0; printf("残り%d回です.\n",9-j); } return 0; } void maegaki(void) { printf("数当てゲームをはじめます.\nぼくの好きな整数を当ててください.\nチャンスは10回です.\nヒントはボゾン\n"); } void in_check_out(int i) { if(!(i-1)) { printf("正解!答えは1です.\n"); } else { printf("残念!\n"); if(i>1) printf("%dより小さいです.\n",i); else printf("%dより大きいです.\n",i); } }

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,x,y; srand((unsigned int)time(NULL)); printf("%\n",i); i=rand()%100; //0以上100以下の整数を生成 y=0; printf("1以上100以下の整数を入力してください。\n"); scanf( "%d", &x ); /* 数値を入力させる */ printf("1以上100以下の整数を入力してください。\n"); y=y+1; if( x == i ) { printf("%d回目で当たりました。\n",y); printf("%d回目で当たりました。\n",y); break; /* 無限ループ */ } else{ if ( x < i ) //printf("正解より大きいです。\n"); printf("正解より大きいです。\n"); else //printf("正解より小さいです。\n"); printf("正解より小さいです。\n"); } } //return0;

  • 配列の要素数に変数を入れたい

    配列に数の入力履歴を入れて最後にその数を出力したいのですが、変数を入れることはできないと勉強した記憶がありまさにその通りコンパイルエラーが出ました。 他に何か方法はありませんでしょうか。 /* 課題1-3 */ #include <time.h> #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int i; int no1; /* 範囲1 */ int no2; /* 範囲2 */ int max; /* 大きい乱数 */ int min; /* 小さい乱数 */ int y; /* 当てさせる数 */ int stage; /* 入力回数 */ int x; /* 読み込んだ値 */ int n; /* 入力制限 */ srand(time(NULL)); no1 = rand(); no2 = rand(); if(no1 > no2){ max = no1; min = no2; } else{ max = no2; min = no1; } y = min + rand() % (max-min); n = ceil(log(max-min)/log(2)); int a[n]; /*←配列の要素数をn個にしたい*/ printf("%d以上%d以下の整数を当ててください。\n", min, max); stage = 0; do{ printf("残り%d回。いくつでしょう:\n", n - stage); scanf("%d", &x); a[stage++] = x; if(y > x) printf("小さいです。\n"); else if(y < x) printf("大きいです。\n"); }while(y != x && stage < n); if(y != x) printf("残念でした。正解は%dです。", y); else printf("正解です。%d回目で正解しました。", stage); puts("\n---入力履歴---"); for(i=0; i<stage; i++) printf("%2d : %4d %+4d\n", i+1, a[i], a[i] - y); return (0); }

  • C言語の課題が分からなくて困っています。

    http://www.picamatic.com/view/5868047_かかか/ URLの画像のような数当てゲームのプログラムを作成しているのですが、(1)~(5)の部分が分からなくて困っています。 面倒だとは思いますが、教えていただけないでしょうか。 #include<stdio.h> #include<stdlib.h> #include<time.h> int mani(void){ int i,x,y; srand((unsigned int)time(NULL)); (1) //1~1000の数をランダムに作成   y=0; //入力回数yを0にセットする for(;;){ //break文があるまで以下の処理を繰り返す printf("1以上1000以下の整数を入力してください。\n"); (2) //答えの入力 y=y+1; //入力回数yを1を増やす (3) //あたりの場合 printf("%d回目で当たりました。\n",y); (4) } else{ //外れの場合    (5) printf("違います。もっと大きな数です。\n"); else printf("違います。もっと小さな数です。\n"); } } return 0; }

  • 高(1)男子 初めてC言語でコードを書きました!!

    C言語を独学し始めた高校一年男子です。 「猫でもわかる C言語プログラミング」という本で勉強しています。 その本のポインタなどの難しいところを除いて 一通り読んで1~100までの数を当てる数当てゲームを作ってみました! これまでは、本に書かれていることを写してやっていたので、自分で組むのは初めてです。 これからは、もっと高度なプログラムやゲームを作っていきたいと思っています。 それを踏まえて、今後どのようなことを気をつけて書いていけばいいかなどの アドバイスをコードを見てしてもらいたいのですが、 だれか、お願いできないでしょうか? これが、そのコードです↓ //<if,goto,rand関数を使った数当てゲーム>// #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { printf("いまから数当てゲームをします\n"); R: printf("0~100のうちどれが答えなのか当ててください\n"); int Q,A,Y,i; srand((unsigned)time(NULL)); Q=rand()%100+1; for(i=1; i<6; i++) {printf("あと%d回で当ててください!\n",6-i); scanf("%d",&A); if(Q<A){printf("もっと小さい数です\n"); } else if(Q>A){printf("もっと大きい数です\n"); } else{printf("正解です!!(^O^)/\nもう一回やりますか??\nはい→1\nいいえ→それ以外の数字\n選択してください\n"); scanf("%d",&Y); if(1==Y){goto R;} if(1!=Y){}break;}} printf("\n「「「終了します」」」\n"); return 0; } 長くなりましたが、アドバイスお願いします m(._.)m