• ベストアンサー

このプログラムの間違いがわかりません

独学でプログラムを勉強し始めましたのですが、どうもうまくいきません。自分ではうまく作れたと思ったのですが。。。プログラムの目的は、お互いに数値を入力していって、15を越えたら、越えた方の負けというプログラムを作ったつもりですが、どこかに間違いがあるようなので、よろしければ、皆様、どこが間違いか教えて頂けないでしょうか?(自分が始めて作ったプログラムなので、真に申し訳ないのですがループ文や自作関数を使ったプログラムであれば嬉しいです。) #include<stdio.h> int main() { int i[8],j[7],sum,a,b ; printf("1、2、3のどれかを入力しなさい。15を超えた人が負けになります。\n"); while(sum<15){ /*ループ*/ ///////////////////player Aの範囲////////////////////// printf("player A入力しなさい"); scanf("%d",&i[a]); /*数値入力*/ sum= sum+i[a]; /*現在の合計*/ printf("現在%dです。",sum); /*結果表示*/ if(sum>=15){ /*判定1*/ printf("player Aの負け!!!"); } else{ ///////////////////player Bの範囲//////////////////////// printf("player B入力しなさい。"); scanf("%d",&j[b]); /*数値入力*/ sum=sum+j[b]; /*現在の合計*/ printf("現在%dです。",sum); /*結果表示*/ if(sum>=15){ /*判定2*/ printf("player Bの負け!!!"); }else{ } } return 0; } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

変数を初期化してないのが問題かな。 あとreturnはもう一個外側に。 独学するならコンパイラのエラーメッセージを見て自分で直せるようにがんばりましょう。 #include<stdio.h> int main() {  int sum=0,in=0;  printf("1、2、3のどれかを入力しなさい。15を超えた人が負けになります。\n");  while (sum<15) {   // player Aの範囲   printf("player A入力しなさい。");   scanf("%d", &in);       // 数値入力   sum = sum + in;        // 現在の合計   printf("現在%dです。", sum); // 結果表示   if (sum>=15) {        // 判定1    printf("player Aの負け!!!");    break;   }   // player Bの範囲   printf("player B入力しなさい。");   scanf("%d", &in);     // 数値入力   sum = sum + in;      // 現在の合計   printf("現在%dです。", sum); // 結果表示   if (sum>=15){      // 判定2    printf("player Bの負け!!!");    break;   }  }  fflush(stdin);  getc(stdin);  return 0; }

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

添削してみました(?) ---------------------- #include<stdio.h> int main(){ int sum,num; char player ; printf("1、2、3のどれかを入力しなさい。15を超えた人が負けになります。\n"); sum=0; player = 'A'; while(1){ /*ループ*/ redo: printf("player %cさん入力してね", player); scanf("%d",&num); /*数値入力*/ if(num<1 || num>3) goto redo; sum += num; /*現在の合計*/ printf("現在%dです。",sum); /* 結果表示 */ if(sum>15){ /* 判定 */ printf("player %cの負け!!!", player); break; } player=(player=='A')? 'B' : 'A'; } return 0; }

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

いろいろ問題がありますが、とりあえずsumもaもbも初期化されていません。

  • shin_5696
  • ベストアンサー率39% (21/53)
回答No.2

まず、intで宣言しているものを初期化していないですね。 Cではどうだったか忘れましたが 初期化する癖をつけましょう。 int a=0; 等とするか、使用前に a=0; としましょう。 また、i[8]もi[7]も同じiという名前の配列なので たぶん、コンパイルで怒られてしまいますね 例えばinputa[8],inputb[7]みたいに 違う名前を指定しましょう。 また、1・2・3を入力したかどうか、 数字であったかのチェックも必要ですね。 また、おそらくa・bはA・Bのプレイヤーが何回目入力なのか をさしているつもりなのでしょうが、 どこでもカウントアップしていないので いつも同じところを参照してしまっています。 入力して加算した直後に a++; b++; を付け加えましょう だいたいのロジックはできていますが 細かい点でミスが多いですね。 頑張ってください^^

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

変数sumが初期化されていないので、最初の while(sum<15){ /*ループ*/ でどう動くか分かりません。

関連するQ&A

専門家に質問してみよう