大学の授業の課題で以下のような問題が出たのですが分かりません。C言語です。
ファイルから読み取る関数と出力する関数を分けたいです。
null 文字を除いて最大20文字を格納できる文字列 name と
int 型のメンバ age と double 型のメンバ height をもつ
構造体に student_t という別名を与え,
3 つの要素をもつ student_t 型の一次元配列 A のメンバを
ファイル input2.txt から読み込み,
実行例に示すような形式で結果を表示するプログラムを書きなさい.
input2.txt の内容
Taro Ishii
20
174.3
Hanako Ishi
19
156.8
Ichiro Seigo
22
170.2
実行結果
A[0]: Taro Ishi(20), 174.3
A[1]: Hanako Ishi(19), 156.8
A[2]: Ichiro Seigo(22), 170.2
自分で書いてみたコードです。(追加しました)
C言語
1 2#include <stdio.h> 3#include <stdlib.h> 4 5#define N 3 6#define LGT 21 7 8typedef struct{ 9 char name[LGT]; 10 int age; 11 double height; 12}student_t; 13 14void input(char fname, student_t *p); 15void show(student_t *p); 16 17int main(){ 18 student_t A[N]; 19 char fname[LGT] = "input2.txt"; 20 21 input(fname, &A); 22 23 show(&A); 24 25 return 0; 26} 27 28void input(char fname, student_t *p){ 29 FILE *fp; 30 int i; 31 32 if((fp = fopen(fname, "r")) == NULL){ 33 printf("\aNot Open"); 34 exit(1); 35 } 36 for(i = 0; i < N; i++){ 37 while(((p->name)[i] = fgetc(fp)) != '\0'); 38 fscanf(fp, "%*c%d", (p->age)[i]); 39 fscanf(fp, "%*c%lf", (p->height)[i]); 40 } 41} 42void show(student_t *p){ 43 int i; 44 45 for(i = 0; i < N; i++){ 46 printf("A[%d]: %s(%d), %f\n", i, (p->name)[i], (p->age)[i], (p->height)[i]); 47 } 48} 49
回答3件
あなたの回答
tips
プレビュー