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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
志保

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

#1

投稿記事 by 志保 » 12年前

[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言語を理解しているか
  乱数までのあたりをかじる程度です。
 ・ライブラリを使っている場合は何を使っているか

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

同じコードを何度も書いているようですし、二次元配列を使用することを提案します。

コード:

//#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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 12年前

エラーの原因は
DamageList[]={0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5};
がC言語の文法的にあり得ないからです。
直す件については、 みけCAT さんの方法を推奨します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

志保

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

#4

投稿記事 by 志保 » 12年前

softyaさん、みけCATさん、回答ありがとうございます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る