• 締切済み

hit&bolwのプログラミングができません

皆様、はじめまして 期末の課題でhit&blowが出たのですがテキストやネット検索しても参考になるのが出てこなかったので聞くことにしました #include "stdafx.h" #include <stdlib.h> #include <time.h> #include <conio.h> int main(int argc, char* argv[]) { int x1, x2, x3, x4; int a1, a2, a3, a4; int hit, blow, loop; int a = 1; printf("hit&blow\nゲーム四つの数をスペース入れて記述しろ\n"); srand(time(0)); do{ x1 = rand() % 10; x2 = rand() % 10; x3 = rand() % 10; x4 = rand() % 10; printf("%d %d %d %d\n",x1, x2, x3, x4); }while(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4 || x3 == x4); loop = 1; while(1 == loop){ scanf("%d", &a1); scanf("%d", &a2); scanf("%d", &a3); scanf("%d", &a4); fflush(stdin); hit = 0; blow = 0; if(x1 == a1){ hit = hit + 1; } if(x2 == a2){ hit = hit + 1; } if(x3 == a3){ hit = hit + 1; } if(x4 == a4){ hit = hit + 1; } if(x1 == a2 || x1 == a3 || x1 == a4){ blow = blow + 1; } if(x2 == a3 || x2 == a4 || x2 == a1){ blow = blow + 1; } if(x3 == a2 || x3 == a1 || x3 == a4){ blow = blow + 1; } if(x4 == a2 || x4 == a3 || x4 == a2){ blow = blow + 1; } printf(" %d hit %d blow\n", hit, blow); if(4 == hit){ loop = 0; } } return 0; } ここまでできたのですが 次の項目ができません (1)正解したときは新しいゲームを続けることができる (2)正解までの最小回数、最大回数を表示する (3)正解したら「○○回で正解しました」と表示する (4)0 0 0 0などの不正入力をできなくする 早急に教えてもらえると助かります

みんなの回答

  • szkbksn
  • ベストアンサー率0% (0/0)
回答No.2

先ほどの回答したものですが、 回答文からは、タブやスペースは消されてしまうようですね 自分でインデント入れてください

  • szkbksn
  • ベストアンサー率0% (0/0)
回答No.1

作ってみました なるべく元のプログラムを流用する形にしています 要求が多少あいまいだったので、私のほうで勘違いしているところもあるかもしれません。 動かしてみて勉強のご参考にしてください #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> unsigned short play1game(void) { int x1, x2, x3, x4; int a1, a2, a3, a4; int hit, blow; int a = 1; unsigned short loop;//正解までにかかった回数をカウントする srand(time(0)); do{ x1 = rand() % 10; x2 = rand() % 10; x3 = rand() % 10; x4 = rand() % 10; printf("%d %d %d %d\n",x1, x2, x3, x4); }while(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4 || x3 == x4); loop = 1; while(1){ do { printf("\n\n第%d回目回答 ", loop); printf("hit&blow ゲーム四つの数をスペース入れて記述しろ\n"); scanf("%d", &a1); scanf("%d", &a2); scanf("%d", &a3); scanf("%d", &a4); fflush(stdin); }while( ((a1|a2|a3|a4) == 0) && (printf("0 0 0 0 は入力できません再入力ください\n")) ); //(4)0 0 0 0などの不正入力をできなくする hit = 0; blow = 0; if(x1 == a1){ hit = hit + 1; } if(x2 == a2){ hit = hit + 1; } if(x3 == a3){ hit = hit + 1; } if(x4 == a4){ hit = hit + 1; } if(4 == hit){ printf("%2d回で正解しました\n", loop); //(3)正解したら「○○回で正解しました」と表示する goto exit; } if(x1 == a2 || x1 == a3 || x1 == a4){ blow = blow + 1; } if(x2 == a3 || x2 == a4 || x2 == a1){ blow = blow + 1; } if(x3 == a2 || x3 == a1 || x3 == a4){ blow = blow + 1; } if(x4 == a2 || x4 == a3 || x4 == a2){ blow = blow + 1; } printf(" %d hit %d blow\n", hit, blow); loop++; } exit: return loop; } int main(int argc, char* argv[]) { unsigned short maxAnswerTime, minAnswerTime; unsigned short gameAnswerTime; minAnswerTime = 0xffff; maxAnswerTime = 0; while(1) { //whileでまわして、(1)正解したときは新しいゲームを続けることができる printf("start game\n"); gameAnswerTime = play1game(); //1回ゲームを実施する if (gameAnswerTime > maxAnswerTime) maxAnswerTime=gameAnswerTime; if (gameAnswerTime < minAnswerTime) minAnswerTime=gameAnswerTime; printf("\n\n"); printf("最小回数:%d, 最大回数:%d\n\n", minAnswerTime, maxAnswerTime); //(2)正解までの最小回数、最大回数を表示する } }

mokou1
質問者

お礼

時間のない中大変ありがとうございます さっそく参考にさせてもらいます

関連するQ&A

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #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;

  • このプログラミングのいけないところは?

    こういうプログラムを作ったんですけど、なぜか正常に作動しません!理由をおしえてください!!!!!! お願いしますーーー!!ちなみに内容はドイツ語です。 #include "stdafx.h" void tyuusinn(); void head_1(); void head_2(); int main() { while(1){ tyuusinn(); } return 0; } void tyuusinn() { int a; printf("(1)→sein,haben,werdenについて\n"); printf("(2)→定冠詞\n"); printf("表示したい項目を選んでください\n"); scanf_s("%d",&a); if(a == 1){ head_1(); } else if(a == 2){ head_2(); } } void head_1() { char a[90] = " sein haben werden"; printf("%6s\n",a); printf("------------------------------\n"); char b[90] = "ich bin habe werde"; printf("%6s\n",b); char c[90] = "du bist hast wirst"; printf("%6s\n",c); char d[90] = "er ist hat wird"; char e[90] = "wir sind haben werden"; char f[90] = "ihr seid habt werdet"; char g[90] = "sie sind haben werden"; printf("%6s\n%6s\n%6s\n%6s\n",d,e,f,g); return; } void head_2() { char a[90] = "der des dem den"; char b[90] = "die der der die"; char c[90] = "das des dem das"; char x[90],y[90],z[90]; printf("男性名詞は?\n"); scanf("%s",&x); if(x == a) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",a); printf("女性名詞は?\n"); scanf("%s",&y); if(y == b) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",b); printf("中性名詞は?\n"); scanf("%s",&z); if(z == c) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",c); return; }

  • c言語 プログラミング(初心者)

    解を判定するプログラミングを作成したのですが、a,b,cを0,1,2と入力したときに解に0.00000が出てきて解がおかしくなります。 どなたか詳しい方教えてください。また簡潔にできる点などありましたらご指摘お願いします。 #include <stdio.h> #include <math.h> int main (void) { double a,b,c,d,x1,x2; printf("ax^2+bx+c=0 の係数を入力してください\n"); scanf("%lf %lf %lf",&a,&b,&c ); if(a==0){ if(b==0) { printf("解は存在しません\n"); } else { x1=-c/b; printf("解は %f です\n",x1); } } else { d=b*b-4*a*c; if(d>=0){ x1=(-b+sqrt(d))/(2.0*a); x2=(-b-sqrt(d))/(2.0*a); if(d==0){ printf("解は %f (重解)です\n",x1); } else { printf("解は %f と %f です\n",x1,x2); } } else { printf("実数解は存在しません(虚数解)\n"); } } return 0; }

  • 配列のプログラミングを作ったのですが「

    問題:10問の計算問題を解いて、以下のような成績表を表示するプログラムを作成せよ 例) 第一問 ○ 第二問 × 第三問 × ・・・ 自分が作った解答)#include<stdio.h> #include<stdlib.h> void main() { int a,b,ans,i; int seikai=0; int huseikai=0; int kaitou[10]; srand((unsigned)time(NULL)); printf("暗算\n"); for(i=0;i<10;i++); { printf("%問\n",i+1); a=rand()%10; b=rand()%10; printf("%d+%dは?\n",a,b); scanf_s("%d",&ans); if(ans==a+b) kaitou[i+1]=seikai; else kaitou[i+1]=huseikai; } for(i=0;i<10;i++) { printf("第%d問",i+1); if(kaitou[i+1]==seikai) printf("○\n",seikai); else printf("×\n",huseikai); } } のように作成したのですが、コンパイルは成功しますが思い通りの解答になりません。 どこが間違っているのか指摘してください。

  • このプログラミングで。

    #include <stdio.h> int main(void) { int x; printf("長い河はどれ?\n 1天の川 2三途の川 3谷川\n"); scanf("%d",&x); if(x == 1){ printf("なるほど"); } else if(x == 2){ printf("フーン"); } else if(x == 3){ printf("やっぱり?"); } else if(x != 1){ printf("ハァ?"); } else if(x != 2){ printf("ハァ?"); } else if(x != 3){ printf("ハァ?"); } return 0; } これを実行して 等しくないときハァ?と表示させて、ふたたび、入力をさせる方法を教えてください。何度でも入力を求める方法もありましたら教えていただきたいです。 とても理解に苦しむような質問ですがよろしくおねがいします。

  • プログラミングについて教えてほしいんですが・・・

    プログラミングについて教えてほしいんですが・・・ プログラミングで四則演算プログラムをやっているのですが余りの求め方がわかりません。足し算の求め方は /*lesson2.c*/ #include<stdio.h> int add(int,int); int main(){ int a,b,c; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); c=add(a,b); printf("a+b=%d\n",c); } int add(int x, int y){ return x+y; } というやり方で求めることができたのですが、余りは上のプログラムのどこを変えたらいいのでしょうか? 誰かわかる人がいたら教えてください。お願いします。

  • C言語、ポインタについて。

    C言語初心者です。"やさしいC"などの入門書を呼んでいて「ポインタ」につまづきました。 別書を買ったり、サイトを見たりしたのですが、理解できませんでした。 "やさしいC"からの引用なのですが、 正: #include <stdio.h> int add(int *x1,int *x2,int a); int main (void){ int n1,n2,a,ans; printf("2科目分の点数を入力してください。\n"); scanf("%d",&n1); scanf("%d",&n2); printf("加算する点数を入力して下さい。\n"); scanf("%d",&a); ans = add(&n1,&n2,a); printf("%d点加算しましたので\n",a); printf("科目1は%d点となりました。\n",n1); printf("科目2は%d点となりました。\n",n2); } int add(int *x1, int *x2,int a){ *x1+=a; *x2+=a; } 誤: #include <stdio.h> int add(int x1,int x2,int a); int main (void){ int n1,n2,a,ans; printf("2科目分の点数を入力してください。\n"); scanf("%d",&n1); scanf("%d",&n2); printf("加算する点数を入力して下さい。\n"); scanf("%d",&a); ans = add(n1,n2,a); printf("%d点加算しましたので\n",a); printf("科目1は%d点となりました。\n",n1); printf("科目2は%d点となりました。\n",n2); } int add(int x1, int x2,int a){ x1+=a; x2+=a; } この2つの違いはなんでしょうか。 アドレスか、そうでないか、という違いはわかりますが、なぜ"誤"のコードだと正しく処理されないのかがわかりません。 教えてください、お願いします。 (「やさしいC」の回答より引用)

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

    配列に数の入力履歴を入れて最後にその数を出力したいのですが、変数を入れることはできないと勉強した記憶がありまさにその通りコンパイルエラーが出ました。 他に何か方法はありませんでしょうか。 /* 課題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プログラミング

    作成したジャンケンをするゲームに対して、人間かコンピュータのどちらかが先に5勝するまで繰り返すように改造せよ。(それぞれの対戦者に対する変数を用意し、勝つごとにその変数に1を加えていく。どちらかが5になれば終了するような反復構造にすればよい。) #include <stdio.h> #include <stdlib.h> main(){ int jibunn,aite; printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); while(jibunn==aite){ printf("Drow\n"); printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); } if(jibunn==aite){ printf("Drow\n"); } else if((jibunn==2)&&(aite==0)){ printf("You win!\n"); } else if((jibunn==0)&&(aite==1)){ printf("You win!\n"); } else if((jibunn==1)&&(aite==2)){ printf("You win!\n"); } else { printf("You lose…\n"); } } ここまでは出来たのですが、これにどのように付け足せばよいのでしょうか? 回答よろしくお願いします。

  • 虚数解の表示

    Ax^2+Bx+Cの形の二次関数の解を計算するプログラムです #include <stdio.h> #include <math.h> int main(void) { double a,b,c,d,x1,x2,real,image; printf("A="); scanf("%lf",&a); printf("B="); scanf("%lf",&b); printf("C="); scanf("%lf",&c); if(a==0){x1=-c/b; printf("X=%5.2lf\n",x1); } if(a!=0.0){d=sqrt(pow(b,2.0)-4*a*c); if(d<0.0){ real=(-b)/(2*a); image=sqrt(-d)/(2*a); printf("実数=%5.2lf\n",real); printf("虚数=±%lfi\n",image);} else if(fabs(d)<0.0){ x1=(-b)/(2*a); printf("X=%5.2lf\n",x1);} else if(d>0.0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("X1=%5.2lf\n",x1); printf("X2=%5.2lf\n",x2);} } return 0;} 判別式d<0、d>0、d=0で分けています 判別式dが負になるとき(虚数解の部分)はそのままではsqrtが使えないので、-dを入れてみたのですがうまくいきません どのように修正すればよいのかご教示願います よろしくお願いします

専門家に質問してみよう