回答編集履歴

3

誤記修正

2018/11/03 13:40

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -13,6 +13,8 @@
13
13
  「追記」
14
14
 
15
15
  usr~/test/c % ./ct
16
+
17
+ ```text
16
18
 
17
19
  1251001 Yamada 83 67 90
18
20
 
@@ -34,7 +36,9 @@
34
36
 
35
37
  1251200 Higashio 61 94 55
36
38
 
39
+
40
+
37
- usr~/test/c % cat ct.c
41
+ ```usr~/test/c % cat ct.c
38
42
 
39
43
  ```c
40
44
 

2

ソース追記

2018/11/03 13:39

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -9,3 +9,123 @@
9
9
  まず、”ファイルを読んで、構造体に入れて表示する”までのプログラムを作ってみましょうd^^
10
10
 
11
11
  いっぺんにやると頭がこんがらがります。リスト構造はその後でいいと思います。
12
+
13
+ 「追記」
14
+
15
+ usr~/test/c % ./ct
16
+
17
+ 1251001 Yamada 83 67 90
18
+
19
+ 1251022 Watanabe 90 75 89
20
+
21
+ 1251033 Saito 50 55 45
22
+
23
+ 1251004 Sato 60 70 83
24
+
25
+ 1251007 Nagashi 81 80 72
26
+
27
+ 1251081 Matsui 90 85 89
28
+
29
+ 1251098 Kudo 95 90 94
30
+
31
+ 1251123 Ota 65 70 72
32
+
33
+ 1251164 Egawa 61 94 71
34
+
35
+ 1251200 Higashio 61 94 55
36
+
37
+ usr~/test/c % cat ct.c
38
+
39
+ ```c
40
+
41
+ #include <stdio.h>
42
+
43
+ #include <stdlib.h>
44
+
45
+ //
46
+
47
+ typedef enum { NO, YES } YesNo;
48
+
49
+ //
50
+
51
+ typedef struct {
52
+
53
+ int id;
54
+
55
+ char name[15];
56
+
57
+ int score[3];
58
+
59
+ } Record;
60
+
61
+ //
62
+
63
+ YesNo str2struct(const char *str, Record *ptr)
64
+
65
+ {
66
+
67
+ if (sscanf(str, "%d %s %d %d %d", &ptr->id, ptr->name, &ptr->score[0],
68
+
69
+ &ptr->score[1], &ptr->score[2]) != 5) {
70
+
71
+ return NO;
72
+
73
+ }
74
+
75
+ return YES;
76
+
77
+ }
78
+
79
+ //
80
+
81
+ void printRecord(const Record *ptr)
82
+
83
+ {
84
+
85
+ printf("% 8d %-10s % 3d % 3d % 3d\n", ptr->id, ptr->name, ptr->score[0],
86
+
87
+ ptr->score[1], ptr->score[2]);
88
+
89
+ }
90
+
91
+
92
+
93
+ int main(void)
94
+
95
+ {
96
+
97
+ FILE *fp;
98
+
99
+ if ((fp = fopen("Student1.dat", "r")) == NULL) {
100
+
101
+ return 1;
102
+
103
+ }
104
+
105
+ //
106
+
107
+ Record rec;
108
+
109
+ char buf[256] = { 0 };
110
+
111
+ while (fgets(buf, sizeof buf, fp) != NULL) {
112
+
113
+ if (str2struct(buf, &rec) == YES) {
114
+
115
+ printRecord(&rec);
116
+
117
+ }
118
+
119
+ }
120
+
121
+ fclose(fp);
122
+
123
+ //
124
+
125
+ return 0;
126
+
127
+ }
128
+
129
+ ```
130
+
131
+ usr~/test/c %

1

追記

2018/11/03 13:36

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -3,3 +3,9 @@
3
3
  fp=fopen("Student1.dat","r");は一回だけだと思いますが?
4
4
 
5
5
  今のままだと一行読んでクローズしないまま、再度オープンしに行ってますd^^
6
+
7
+ 「追記」
8
+
9
+ まず、”ファイルを読んで、構造体に入れて表示する”までのプログラムを作ってみましょうd^^
10
+
11
+ いっぺんにやると頭がこんがらがります。リスト構造はその後でいいと思います。