• 締切済み

C言語について プログラムが動きません

ゲームのプログラムを作りたいものです。 今、試作の途中の段階で以下のようなプログラムを作ってみたのですが、 コアダンプが表示されてうまく起動しません。 どの点を変更すればいいのか、教えてください。 使っている言語はC言語です。 よろしくお願いいたします。 #include <stdio.h> #include <string.h> struct monster{ int type; /* タイプ */ char trick[25]; /* 技 */ char trick2[25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name[10]; /* 名前 */ int attack; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; char names[5][10] = {"v", "w", "x", "y", "z"}; main(){ int s = 0; int a[3]; int i; int m; struct monster monster[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60}, }; printf("好きなモンスターを3つ選んでください\n\n"); while (s < 1){ for (i = 0; i++; i<3){ printf("%d体目を選んでください。\n\n", i+1); for(m = 0; m++; m < 4) printf("%d, %s\n", m+1, monster[m].name); printf("5, %s\n\n", monster[4].name); scanf("%d", a[i]); printf("%d体目 : %s\n\n", i+1, monster[a[i]-1].name); } printf("これでよろしいですか?\n"); for(i = 0; i++; i<2) printf("%d体目 : %s ", i+1, monster[a[i]-1].name); printf("3体目 : %s\n\n", monster[a[2]-1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &i); if(i=1) return s = 1; else return s = 0; } }

みんなの回答

回答No.2

コアダンプするならデバッグはかなり簡単だと思うのだけれど、デバッガーを使えば? あと、コンパイルするときは-Wallなどして、表示されたwarningはすべて修正した方がいいですね。 % gcc -Wall -g example.c % gdb a.out > run あとforループがおかしいですね。 warningに引っかかるようなところを修正したらこんな感じですが。 #include <stdio.h> #include <string.h> struct monster { int type; /* タイプ */ char trick [25]; /* 技 */ char trick2 [25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name [10]; /* 名前 */ int attack; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; char names [5][10] = {"v", "w", "x", "y", "z"}; int main(void) { int s = 0; int a [3]; int i; int m; struct monster monster[5] = { {1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60}, {2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60}, {3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60}, {4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60}, {5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60}, }; printf("好きなモンスターを3つ選んでください\n\n"); while (s < 1) { for (i = 0; i < 3; i++) { printf("%d体目を選んでください。\n\n", i+1); for (m = 0; m < 5; m++) printf("%d, %s\n", m + 1, monster[m].name); scanf("%d", &a[i]); printf("%d体目 : %s\n\n", i+1, monster[a[i]-1].name); } printf("これでよろしいですか?\n"); for (i = 0; i < 3; i++) printf("%d体目 : %s ", i+1, monster[a[i]-1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &i); if (i == 1) s = 1; else s = 0; } return 0; } あと、ローカル変数にももう少し意味がある名前をつけていいと思ったり、C99対応のコンパイラーならもう少し実際に使えるところの近くで変数宣言ができるとか、sはbool型にしたほうが良さそうとか思うのですが。

appleboshi
質問者

お礼

ありがとうございます。 おかげさまで無事動きましたm(__)m

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

少なくとも scanf("%d", a[i]); はおかしい。

appleboshi
質問者

お礼

ご指摘,ありがとうございます。 おかげさまで動くことができました!

関連するQ&A