/* readfile.c --- 交差点データのファイル入力 */ #include #define CROSSING_SIZE 100 /* 交差点数=5 */ #define MAX_NAME_SIZE 50 /* 最大文字数50文字(半角) */ typedef struct { double x, y; /* 位置 x, y */ } Position; /* 位置を表す構造体 */ typedef struct { int id; /* 交差点番号 */ Position pos; /* 位置を表す構造体 */ double wait; /* 平均待ち時間 */ char jname[MAX_NAME_SIZE]; /* 日本語 */ char ename[MAX_NAME_SIZE]; /* 英語 */ int points; /* 交差道路数 */ int next[5]; /* 隣接する交差点番号 */ } Crossing; static Crossing cross[CROSSING_SIZE]; int map_read(char *filename) { FILE *fp; int i, j; int crossing_number; /* 交差点数 */ fp = fopen(filename, "r"); if (fp == NULL) { printf("File %s is not created\n", filename); return -1; } /* はじめに交差点数を読み込む */ fscanf(fp, "%d", &crossing_number); if ((crossing_number < 1) || (crossing_number >= CROSSING_SIZE)) { printf("Illegal data number (%d)\n", crossing_number); return 0; } for (i = 0; i < crossing_number; i++) { fscanf(fp, "%d,%lf,%lf,%lf,%[^,],%[^,],%d", &(cross[i].id), &(cross[i].pos.x), &(cross[i].pos.y), &(cross[i].wait), cross[i].jname, cross[i].ename, &(cross[i].points)); for (j = 0; j < cross[i].points; j++) fscanf(fp, ",%d", &(cross[i].next[j])); } fclose(fp); /* ファイルから読み込んだ交差点数を返す */ return crossing_number; } void print_cross(int i) { int j; printf("交差点番号: %2d, 座標: (%5.2lf,%5.2lf), 名前: %s (%s),", cross[i].id, cross[i].pos.x, cross[i].pos.y, cross[i].jname, cross[i].ename); printf("\n 待ち時間:%5.1lf, points:%d, adjacent crossing(", cross[i].wait, cross[i].points); for (j = 0; j < cross[i].points; j++) printf("%d ", cross[i].next[j]); printf(")\n\n"); } int main(void) { int i; int crossing_number; /* 交差点数 */ /* ファイルの読み込み */ crossing_number = map_read("map2.dat"); /* データの表示 */ printf("loaded %d crossings\n",crossing_number); /* 交差道路数だけ繰り返し */ for (i = 0; i < crossing_number; i++) print_cross(i); return 0; }