質問編集履歴

3

2022/07/17 13:05

投稿

Rokuba
Rokuba

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,2 +1 @@
1
- 解決
2
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1
+ 間違えて消してしまいました。もうしわけございません。、、、、、、、、、、、

2

解決

2022/07/15 12:07

投稿

Rokuba
Rokuba

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,56 +1,2 @@
1
- C言語を勉強中です。下の構造体を用いて構造体配列を動的に確保後、ファイル「a.txt」から情報を読込み,標準出力するプログラムを作成しています。
2
-
3
- 「a.txt」の中身は
4
- 14001 Aoki M 50
5
- 14002 Ishida F 60
6
- 14003 Uehara M 70
7
- 14004 Endoh F 80
8
- 14005 Ogawa F 95
9
- 14006 Katoh M 85
10
- 14007 Kimura F 55
11
- 14008 Kuwata M 95
12
- 14009 Keda F 70
13
- 14010 Kobayashi F 100
14
- です。
1
+ 解決
15
- そこで下のコードを書いたのですが、
16
- ・・・・・
17
- ```C
18
- #include<stdio.h>
19
- #include<stdlib.h>
20
-
21
- typedef struct student{
22
- int id;
23
- char name[20];
24
- char gender[1];
25
- int point;
26
- } STUDENT;
27
-
28
- int main(void){
29
- STUDENT * st = malloc(sizeof(STUDENT)*10); /* malloc 関数で動的確保(10 領域) */
30
-
31
-
32
- /* ファイルオープンの処理 */
33
- FILE*fp=fopen("02student.txt", "r");
34
-
35
- int i;
36
-
37
- /* ファイル入力処理(ポインタ変数 st を各領域を参照し,格納) */
2
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38
- for(i=0; i<10; i++){
39
- fscanf(fp, "%d %s %s %d", &st->id, st->name, st->gender, &st->point);
40
- }
41
-
42
-
43
- /* 標準出力処理(ポインタ変数 st から各領域を参照し,値を確認) */
44
- for(i=0; i<10; i++){
45
- printf("%d %s %s %d\n", st->id, st->name, st->gender, st->point);
46
- }
47
- /* ファイルクローズの処理 */
48
- fclose(fp);
49
- /* メモリの解放処理 */
50
- free(st);
51
-
52
- return 0;
53
- }
54
- ```
55
- ・・・・・
56
- 14010 Kobayashi F 100が10回出力されるだけでした。for(i=0; i<10; i++)は使わなければなりません。すべての文字列を出力するにはどうすればいいでしょうか?ご教授お願いします。できるなら原型を保ったままでお願いします。

1

ソースアップしなおしました

2022/07/15 05:28

投稿

Rokuba
Rokuba

スコア2

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,7 @@
14
14
  です。
15
15
  そこで下のコードを書いたのですが、
16
16
  ・・・・・
17
+ ```C
17
18
  #include<stdio.h>
18
19
  #include<stdlib.h>
19
20
 
@@ -25,14 +26,15 @@
25
26
  } STUDENT;
26
27
 
27
28
  int main(void){
28
- STUDENT * st = malloc(sizeof(STUDENT)*10); /* 動的確保(10 領域) */
29
+ STUDENT * st = malloc(sizeof(STUDENT)*10); /* malloc 関数で動的確保(10 領域) */
29
-
30
+
31
+
30
32
  /* ファイルオープンの処理 */
31
- FILE*fp=fopen("a.txt", "r");
33
+ FILE*fp=fopen("02student.txt", "r");
32
-
34
+
33
35
  int i;
34
-
36
+
35
- /* ファイル入力処理(ポインタ変数 st を各領域を参照し,格納) ここがわからない*/
37
+ /* ファイル入力処理(ポインタ変数 st を各領域を参照し,格納) */
36
38
  for(i=0; i<10; i++){
37
39
  fscanf(fp, "%d %s %s %d", &st->id, st->name, st->gender, &st->point);
38
40
  }
@@ -49,5 +51,6 @@
49
51
 
50
52
  return 0;
51
53
  }
54
+ ```
52
55
  ・・・・・
53
56
  14010 Kobayashi F 100が10回出力されるだけでした。for(i=0; i<10; i++)は使わなければなりません。すべての文字列を出力するにはどうすればいいでしょうか?ご教授お願いします。できるなら原型を保ったままでお願いします。