|
科目数を可変にしてみました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_CLASS 4 /* 10: 1-ABC, 2-ABC, 3-ABCD */
#define N_PERIOD 4
#define N_DAYS 2 /* 5: 月、火、水、木、金 */
#define N_SUBJECT 10 /* 最大 */
int main(void)
{
int i, j, k, n, c;
char buf[256], sbuf[256], *s, *p, *subject[N_SUBJECT+1];
FILE *fp = fopen("timetable.txt", "r");
FILE *fp2 = fopen("subject.txt", "r");
if (!fp || !fp2) puts("can't open files"), exit(1);
for (i = 0; i < N_CLASS; i++) {
fgets(sbuf, sizeof buf, fp2);
for (n = 0, s = sbuf; (p = strtok(s, " \t\n")); s = NULL) {
if (n == N_SUBJECT+1) puts("too many subjects"), exit(1);
subject[n++] = p;
}
fscanf(fp, "%s", buf), puts(buf); /* クラス名 */
for (j = 0; j < N_DAYS; j++) {
fscanf(fp, "%s", buf), printf(" %s ", buf); /* 曜日 */
for (k = 0; k < N_PERIOD; k++) {
if (fscanf(fp, "%d", &c) != 1) puts("error"), exit(1);
printf("%-8s", (c > 0 && c < n) ? subject[c] : "--");
}
printf("\n");
}
}
return 0;
}
/*
-------- timetable.txt --------
1-A
月 3 1 4 2
火 5 2 3 1
1-B
月 5 4 3 2
火 1 3 2 4
1-C
月 1 2 5 3
火 2 1 4 5
2-A
月 1 2 3 4
火 5 4 6 1
--------------------------------
-------- subject.txt --------------
1-A 英語 数学 国語 理科 社会
1-B 社会 英語 数学 国語 理科
1-C 数学 英語 理科 社会 国語
2-A 英語 数学A 数学B 国語 理科 社会
-----------------------------------
-------- 出力結果 -----------------
1-A
月 国語 英語 理科 数学
火 社会 数学 国語 英語
1-B
月 理科 国語 数学 英語
火 社会 数学 英語 国語
1-C
月 数学 英語 国語 理科
火 英語 数学 社会 国語
2-A
月 英語 数学A 数学B 国語
火 理科 国語 社会 英語
-----------------------------------
*/
|