FileRead_scanfについて

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

FileRead_scanfについて

#1

投稿記事 by リンク » 9年前

現在、龍神録プログラミングの館の敵データをエクセルで作ってみようのエクセルのデータを読み込む部分のソースコードを元にして
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つだけに設定しています。
こちらが自分で書いたソースコードなのですが、なにか問題点などがないでしょうか?

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

Re: FileRead_scanfについて

#2

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

  • enemy_orderの各メンバの型がわかりませんが、FileRead_scanfの仕様はscanfに似ているので、double型のデータを読み込むためには%fではなく、%lfを使わなければいけません。
  • FileRead_eof(fp) == 0はループの条件として不適切です。FileRead_scanfが成功したかどうかで判定するべきです。
    (参考: c - Why is “while ( !feof (file) )” always wrong? - Stack Overflow)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: FileRead_scanfについて

#3

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

enemy_orderエクセルを使って敵の出現データを作ってみようのenemy_order_tだと仮定すると、enemy_order.item_nの型はint[6]なので、
最後の引数の&enemy_order.item_nも間違いで、enemy_order.item_nもしくは&enemy_order.item_n[0]とするべきです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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