C++で下記のようにテキストファイルのデータを三次元配列に代入したいのですが特定の場所でフリーズしてしまいます。
テキストファイル(MapData1.txt)のデータはこのようになっております。
LAYER_1
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1
LAYER_2
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
LAYER_3
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
LAYER_ITEM
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
LAYER_CHARACTER
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
LAYER_EVENT
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0
また、コードの方はこのようになっております。
cpp
1signed char MAPLELATION::Create(int mapnum) { // マップ読み込み生成関数 2 3 char FBuffer[32]; // ファイルパス格納バッファ 4 sprintf_s(FBuffer, sizeof(char) * 32, "Material\\MapData\\MapData%d.txt", mapnum); // ファイルパス代入 5 6 int FHandle = FileRead_open(FBuffer); // ファイルオープン,ファイルハンドルにポインタ代入 7 if (FHandle == -1) exit(-0xC1); 8 9 for (char layer = 0; layer < MAP_LAYER_MAX; layer++) { 10 while (FileRead_getc(FHandle) != '\n'); // 1行改行 11 for (char y = 0; y < MAP_Y_MAX; y++) { 12 for (char x = 0; x < MAP_X_MAX; x++) { 13 char val[3] = { 0,0,0 }; // 数値バッファ 14 for (char v = 0; v < 3; v++) { 15 val[v] = FileRead_getc(FHandle); // ファイルの文字代入 ここで止まる 16 if (val[v] != ' ') val[v] = (val[v] - '0'); // 文字を数値に変換 17 else val[v] = 0; // もし空白だったら0にする 18 } 19 Square[layer][y][x] = val[0] * 100 + val[1] * 10 + val[2]; // ファイル平面データに代入 20 FileRead_getc(FHandle); // 区切り文字進める 21 } 22 } 23 if (layer != MAP_LAYER_MAX - 1) while (FileRead_getc(FHandle) != '\n'); // 1行改行 24 else FileRead_close(FHandle); // 最後のレイヤー(LAYER_EVENT)ならファイル閉じる 25 } 26 27 28 LivingMapCode = mapnum; // マップコード代入 29 30 return mapnum; 31}
どこか抜けているところがございましたら大変申し訳ありません。
誰かアドバイス等くださる方がございましたら、心から感謝申し上げます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/01 08:14