ページ 11

FileRead_scanfについて

Posted: 2016年5月28日(土) 22:35
by リンク
現在、龍神録プログラミングの館の敵データをエクセルで作ってみようのエクセルのデータを読み込む部分のソースコードを元にして
atoiを使って文字列を数値に変換するところをFileRead_scanfで直接数値として読み込むコードを書いたのですが、
どうも仕様を理解できていないのか、うまくデータを読み込んでくれません。

コード:

while (FileRead_getc(fp) != '\n');//一行読み飛ばす
	while (FileRead_eof(fp) == 0) {//ファイルの終端になるまで読み込み
		FileRead_scanf(fp, "%d,%d,%d,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d", &enemy_order[i].start, &enemy_order[i].pattern_i,
			&enemy_order[i].knd, &enemy_order[i].x, &enemy_order[i].y, &enemy_order[i].sp, &enemy_order[i].bltime,
			&enemy_order[i].blknd, &enemy_order[i].col, &enemy_order[i].hp, &enemy_order[i].blknd2, &enemy_order[i].wait,&enemy_order[i].item_n);
		i++;
	}
アイテム部分は1つだけに設定しています。
こちらが自分で書いたソースコードなのですが、なにか問題点などがないでしょうか?

Re: FileRead_scanfについて

Posted: 2016年5月28日(土) 22:56
by みけCAT
  • enemy_orderの各メンバの型がわかりませんが、FileRead_scanfの仕様はscanfに似ているので、double型のデータを読み込むためには%fではなく、%lfを使わなければいけません。
  • FileRead_eof(fp) == 0はループの条件として不適切です。FileRead_scanfが成功したかどうかで判定するべきです。
    (参考: c - Why is “while ( !feof (file) )” always wrong? - Stack Overflow)

Re: FileRead_scanfについて

Posted: 2016年5月28日(土) 22:59
by みけCAT
enemy_orderエクセルを使って敵の出現データを作ってみようのenemy_order_tだと仮定すると、enemy_order.item_nの型はint[6]なので、
最後の引数の&enemy_order.item_nも間違いで、enemy_order.item_nもしくは&enemy_order.item_n[0]とするべきです。