#include #define NMAX 100 struct student { char name[30]; int mathpt; int engpt; int jpnpt; }; int main(int argc, char *argv[]) { FILE *stream; char buf[500]; struct student pt[NMAX+1]; int i, n; void dispall(struct student[]); if (NULL == argv[1]) { stream = stdin; } else { stream = fopen(argv[1], "r"); if (NULL == stream) { fprintf(stderr, "Cannot open data file [%s]\n", argv[1]); exit(1); } } i = 0; while (NULL != fgets(buf, sizeof buf, stream)) { if (i >= NMAX) { fprintf(stderr, "Reached to maximum number(%d)\n", NMAX); break; } n = sscanf(buf, "%29s %d %d %d", pt[i].name, &pt[i].mathpt, &pt[i].engpt, &pt[i].jpnpt); if (n == 4) { i++; } } if (stdin != stream) fclose(stream); pt[i].name[0] = 0; /* 終端の印 */ dispall(pt); } void dispall(struct student pt[]) { int i, sum; for (i=0; pt[i].name[0] != 0; i++) { sum = pt[i].mathpt+pt[i].engpt+pt[i].jpnpt; printf("%2d: %-20s, %d, %d, %d | %d\n", i+1, pt[i].name, pt[i].mathpt, pt[i].engpt, pt[i].jpnpt, sum); } }