- ベストアンサー
このプログラムの間違いがわかりません
独学でプログラムを勉強し始めましたのですが、どうもうまくいきません。自分ではうまく作れたと思ったのですが。。。プログラムの目的は、お互いに数値を入力していって、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; } }
- みんなの回答 (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)
添削してみました(?) ---------------------- #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)
いろいろ問題がありますが、とりあえずsumもaもbも初期化されていません。
- shin_5696
- ベストアンサー率39% (21/53)
まず、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)
変数sumが初期化されていないので、最初の while(sum<15){ /*ループ*/ でどう動くか分かりません。