ページ 11

配列について困っています

Posted: 2013年9月16日(月) 20:01
by 志保
[1] 質問文
 [1.1] 自分が今行いたい事は何か
  20面ダイスの出目に応じてダメージを難易度別の表(配列)から決定するプログラムを作ること(ゲームで使用するもの)。
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)

コード:

//#define _TIME_DEFINES
//#define _STDLIB_DEFINES
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define DICE 20
//#pragma warning(disable:4996)

int main(void){
	int i, j, DamageRoll, DamageValue, Diff;
	int DamageList[20]={0};
	j=0;
	while(j=1){

	printf("Choose Pain Number\n 1:Sharp:突き刺された,\n 2:Dull:鈍痛,\n 3:Cramp:痙攣,\n 4:Throbbing:ズキズキする,\n 5:Pressure:圧力,\n 6:Burning:燃える,\n 7:Tender:ピリピリする");
	scanf("%d",&Diff);

	srand((unsigned)time(NULL));
	DamageRoll=rand()%DICE;

		if(Diff==1){
			DamageList[]={0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==2){
			DamageList[]={0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==3){
			DamageList[]={0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==4){
			DamageList[]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==5){
			DamageList[]={0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==6){
			DamageList[]={0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		if(Diff==7){
			DamageList[]={0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3};
			for(i=0; i<DICE; i++){
				if(i==DamageRoll){
					DamageValue=DamageList[i];
					break;
				}
			}
		}
		printf(" your spot on a Dice is %d\n your Damage is %d\n\n If do you continue, press 1",DamageRoll, DamageValue);
		scanf("%d",&j);
	}
	return 0;
}
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)

コード:

(22) : error C2059: 構文エラー : ']'
(31) : error C2059: 構文エラー : ']'
(40) : error C2059: 構文エラー : ']'
(49) : error C2059: 構文エラー : ']'
(58) : error C2059: 構文エラー : ']'
(67) : error C2059: 構文エラー : ']'
(76) : error C2059: 構文エラー : ']'
 [1.4] 今何がわからないのか、知りたいのか
  全てカッコがあってるかを確認しました。どうしてこんなエラーが出てしまうのか分かりません。
  1,2,7行はSDKコマンドプロンプトでの不具合?を修正するためのものです。

[2] 環境  
 [2.1] OS : Windows7
 [2.2] コンパイラ名 : SDKコマンドプロンプト

[3] その他
 ・どの程度C言語を理解しているか
  乱数までのあたりをかじる程度です。
 ・ライブラリを使っている場合は何を使っているか

Re: 配列について困っています

Posted: 2013年9月16日(月) 20:09
by みけCAT
同じコードを何度も書いているようですし、二次元配列を使用することを提案します。

コード:

//#define _TIME_DEFINES
//#define _STDLIB_DEFINES
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define DICE 20
//#pragma warning(disable:4996)

int main(void){
	int j, DamageRoll, DamageValue, Diff;
	int DamageList[7][20]={
		{0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4},
		{0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3},
		{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3},
		{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2},
		{0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5},
		{0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5},
		{0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3}
	};
	j=0;
	while(j=1) {

		printf("Choose Pain Number\n 1:Sharp:突き刺された,\n 2:Dull:鈍痛,\n 3:Cramp:痙攣,\n 4:Throbbing:ズキズキする,\n 5:Pressure:圧力,\n 6:Burning:燃える,\n 7:Tender:ピリピリする");
		scanf("%d",&Diff);

		srand((unsigned)time(NULL));
		DamageRoll=rand()%DICE;


		if(1<=Diff && Diff<=7){
			if(0<=DamageRoll && DamageRoll<DICE) {
				DamageValue=DamageList[Diff-1][DamageRoll];
			}
		}
		printf(" your spot on a Dice is %d\n your Damage is %d\n\n If do you continue, press 1",DamageRoll, DamageValue);
		scanf("%d",&j);
	}
	return 0;
}

Re: 配列について困っています

Posted: 2013年9月16日(月) 20:12
by softya(ソフト屋)
エラーの原因は
DamageList[]={0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5};
がC言語の文法的にあり得ないからです。
直す件については、 みけCAT さんの方法を推奨します。

Re: 配列について困っています

Posted: 2013年9月16日(月) 21:07
by 志保
softyaさん、みけCATさん、回答ありがとうございます。

初期化以外で[]にしてはいけないことを忘れていました。