現在ソースファイルと同じ場所にあるmaze.txtから迷路の情報をとっていますが、これを複数のmaze(指定数値),txtの入ったファイルから1つを指定して読み込ませるという処理をさせたいです。
試しにmazeの入ったファイルを作りましたが、そこを参照できません。ファイルの中身を参照する方法を教えてください。
#include <stdio.h>
#include <direct.h>
#include <stdlib.h>
#include <string.h>
int width, dir[4] = { 1,-1 }, route = 0, dis = 0, disMin, shortRoute = 0, mazeSize;
void makeFile(int maze[])
{
int i;
char file_name[22];
FILE *fp;
route++;
sprintf(file_name, "route\\route(%d).txt", route);
fp = fopen(file_name, "w");
for (i = 0; i < mazeSize; i++) {
if (!maze[i]) fprintf(fp, " ");
else if (maze[i] == 1) fprintf(fp, "■");
else if (maze[i] == 2) fprintf(fp, "S");
else if (maze[i] == 3) fprintf(fp, "G");
else if (maze[i] == 4) fprintf(fp, "→");
else if (maze[i] == 5) fprintf(fp, "←");
else if (maze[i] == 6) fprintf(fp, "↓");
else fprintf(fp, "↑");
if (i%width == width - 1) fprintf(fp, "\n");
}
fclose(fp);
printf("route(%d).txtを作成しました。[%d]\n", route, dis);
return;
}
// 探索
void search(int maze[], int pos)
{
maze[pos] = 3;
int x;
for (x = 0; x < 4; x++) {
if (!maze[pos + dir[x]]) {
search(maze, pos + dir[x]);
maze[pos + dir[x]] = 0;
}
else if (maze[pos + dir[x]] == 2) {
makeFile(maze);
}
}
return;
}
int main()
{
int i,n, *maze;
FILE *fp;
char data[3] = {};
printf("指定ファイル・・・\n");
scanf("%d",&n);
if ((fp = fopen("maze(%d).txt", "r",n)) == NULL) {
printf("maze.txtがありません。\n");
}
// 迷路の幅、サイズ読み込み
fscanf(fp, "%d %d", &width, &mazeSize);
// メモリの確保
if ((maze = (int *)malloc(sizeof(int)*mazeSize)) == NULL) return 1;
// フォルダ作成
mkdir("route");
// 迷路を数値化
i = 0;
while ((data[0] = fgetc(fp)) != EOF) {
if (data[0] != '\n') {
data[1] = fgetc(fp);
if (!strcmp(data, " ")) maze[i] = 0;
else if (!strcmp(data, "■")) maze[i] = 1;
else if (!strcmp(data, "○")) maze[i] = 2;
else if (!strcmp(data, "☆")) maze[i] = 3;
i++;
}
}
// 縦方向の探索値
dir[2] = width;
dir[3] = -width;
// スタートを探す
for (i = 0; i < mazeSize; i++) {
if (maze[i] == 2) break;
}
search(maze, i);
// 結果表示
if (shortRoute) {
printf("\n最短経路ファイル\t:route(%d)\n", shortRoute);
printf("歩数 \t:%d\n", disMin);
}
getchar();
return 0;