こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

プログラミングの変数について質問です。

プログラミングの変数について質問です。

次のプログラミングは自分で書いたプログラムの一部です。


void inputmonster(int x[][3], struct monster monster)
{
int i, s, t, m, n;

for(t = 0; t < 2; t++){
s = 0;

while (s < 1){
printf("player%dは好きなモンスターを3つ選んでください\n\n", t+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", &x[t][i]);
printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name);
}

printf("これでよろしいですか?\n");
for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].name);
printf("1、はい 2、いいえ\n");
scanf("%d", &n);
if(n == 1) s = 1;
else s = 0;
}
}
}


これをコンパイルすると次のようなエラーが表示されます。

monsterbattle.c: 関数 ‘inputmonster’ 内:
monsterbattle.c:497:63: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません
for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name);
^
monsterbattle.c:499:45: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません
printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name);
^
monsterbattle.c:503:68: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません
for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].na me);


どのように改変すればこのようなエラーを表示しないようにできるのでしょうか?
基本的な質問ではあると思いますが、是非教えていただけるとありがたいです。
よろしくお願いします。

投稿日時 - 2015-07-29 22:20:16

QNo.9021082

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

void inputmonster(int x[][3], struct monster monster)
じゃなくて
void inputmonster(int x[][3], struct monster monster[])
だと思います。

投稿日時 - 2015-07-30 04:49:43

お礼

大変遅くなってしまい申し訳ありません。
無事解決いたしました!
ありがとうございました!

投稿日時 - 2016-07-14 21:18:05

ANo.1

monster[m].nameはどのように定義していますか?
配列でもポインタでもベクトルでもないと言っていますが?

投稿日時 - 2015-07-29 22:24:31

補足

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 power; /* 攻撃力 */
int diffence; /* 防御力 */
int speed; /* 素早さ */
int HP; /* 体力 */

/* 1,fire 2,water 3,nature 4,thunder 5,wind */
};



main(){
int a[2][3];

struct monster monster[5] = {
{ 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100},
{ 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100},
{ 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100},
{ 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100},
{ 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100},
};

struct monster monster2[5] = {
{ 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100},
{ 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100},
{ 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100},
{ 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100},
{ 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100},
};

inputmonster(a, monster);

printf("これからバトルを開始します\n\n");

printf("player1は%sをくりだした。\n", monster[a[0][0]-1].name);
printf("player2は%sをくりだした。\n", monster2[a[1][0]-1].name);


battle(a);

return 0;
}



void inputmonster(int x[][3], struct monster monster)
{
int i, s, t, m, n;

for(t = 0; t < 2; t++){
s = 0;

while (s < 1){
printf("player%dは好きなモンスターを3つ選んでください\n\n", t+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", &x[t][i]);
printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name);
}

printf("これでよろしいですか?\n");
for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].name);
printf("1、はい 2、いいえ\n");
scanf("%d", &n);
if(n == 1) s = 1;
else s = 0;
}
}
}

このようなかんじで定義しているつもりです。
どこら辺を修正すればよろしいでしょうか?

投稿日時 - 2015-07-29 22:35:49

お礼

大変遅くなってしまい申し訳ありません。
無事解決いたしました!
ありがとうございました!

投稿日時 - 2016-07-14 21:18:46

あなたにオススメの質問