ページ 11

マップがおかしくなります。

Posted: 2009年10月03日(土) 09:26
by ひよこ
RPGを作っているのですが、
マップ読み込みで変な形になってしまいます。
int Map[15][20];

//マップ情報をエクセルから読み込んで格納する関数
void load_story(){
	int n,num,i,fp;
	char fname[32];
	sprintf(fname,"map%d.csv",0);
	int input[64];
	char inputc[64];

	fp = FileRead_open(fname);//ファイル読み込み
	if(fp == NULL){
		printfDx("read error\n");
		return;
	}
	for(i=0;i<2;i++)//最初の2行読み飛ばす
		while(FileRead_getc(fp)!='\n');

	n=0,num=0;
	while(1){
		for(i=0;i<64;i++){
			inputc=input=FileRead_getc(fp);//1文字取得する
			if(inputc=='/'){//スラッシュがあれば
				while(FileRead_getc(fp)!='\n');//改行までループ
				i=-1;//カウンタを最初に戻して
				continue;
			}
			if(input==',' || input=='\n'){//カンマか改行なら
				inputc='\0';//そこまでを文字列とし
				break;
			}
			if(input==EOF){//ファイルの終わりなら
				goto EXFILE;//終了
			}
		}
		
			Map[n][num]=atoi(inputc);
			num++;
	
		if(num==20){
			num=0;
			n++;
		}
	}
EXFILE:
	FileRead_close(fp);
}

Re:マップがおかしくなります。

Posted: 2009年10月03日(土) 10:00
by zwi
どう変なのか教えてもらえますか?
気になるのは64バイトしかバッファが無いので3桁の数値が続くと64バイトをオーバーしそうな気がしますが、オーバーしない保障があるならかまいません(私なら2倍以上はバッファの余裕を見ます)。

Re:マップがおかしくなります。

Posted: 2009年10月03日(土) 11:14
by ひよこ
csvで0か1を入れてあるだけなのでオーバーはしないと思います。
わかりずらいと思うので実行結果とcsvを添付しました。

Re:マップがおかしくなります。

Posted: 2009年10月03日(土) 11:43
by toyo
for(i=0;i<2;i++)//最初の2行読み飛ばす
		while(FileRead_getc(fp)!='\n');
最初の2行を読み飛ばしているからではないでしょうか
csvの3行目のデータから読み込むので画像の結果と一致しています

Re:マップがおかしくなります。

Posted: 2009年10月03日(土) 11:48
by zwi
確かに3行目から読んでいるのでそれが原因だと思います。
コメント行のスキップ機能とか、どこかのソースを参考にされたんでしょうか?

Re:マップがおかしくなります。

Posted: 2009年10月03日(土) 11:56
by ひよこ
あ、本当に3行目から読んでました。
本当に単純なミスでした。
toyoさん、zwiさんありがとうございました。