登録番号(int no)と名前(char *name)と年齢(int age)を含む構造体person型のポインタ変数を宣言し, 登録人数分だけの動的メモリ確保をせよ. そして, データをファイルから入力せよ. ファイルの形式は, 先頭に登録する人数とし, そのあとに人数分のデータを登録番号, 名前, 年齢の順に書いていく(下の例を参照. 登録番号は入力順に1,2,3,4,5, …とする. そして, 入力した全員データを表示せよと言う問題が出たのですが分からなくて困っています。
どなたか教えていただけないでしょうか?
(ファイルの例)
3
1 田中 20
2 大田 40
3 井上 35
構造体についての質問です。
Re:構造体についての質問です。
このタイトルと内容だと構造体の定義方法が分からないのか、構造体の動的メモリ確保が分からないのか不明です。
それとも問題全体なのでしょうか?
1.構造体を定義する
2.ファイルの最初を読み、データ個数を取得する
3.構造体の配列をデータ個数分確保する
4.ファイルの続きをデータ個数分取得する
5.読み込んだ文字列情報を分割して構造体に格納する
6.構造体に格納した情報を表示する
ざっくり分けて全体の流れは1~6のようになりますが、このうち分からないのはどこでしょう?
また、分かっている箇所のソースを貼り付けて頂けると以後の回答がスムーズに進むと思います。
それとも問題全体なのでしょうか?
1.構造体を定義する
2.ファイルの最初を読み、データ個数を取得する
3.構造体の配列をデータ個数分確保する
4.ファイルの続きをデータ個数分取得する
5.読み込んだ文字列情報を分割して構造体に格納する
6.構造体に格納した情報を表示する
ざっくり分けて全体の流れは1~6のようになりますが、このうち分からないのはどこでしょう?
また、分かっている箇所のソースを貼り付けて頂けると以後の回答がスムーズに進むと思います。
Re:構造体についての質問です。
具体的にどこまで出来ているか、
どこで詰まっているかを詳しくお願いします。
-----------------------------------------
①構造体が分からない
②動的確保の仕方が分からない
③ファイルからの入力の仕方が分からない
④データの表示のさせ方が分からない
-----------------------------------------
など。
プログラムの製作途中であれば、そのプログラムを載せた方が的確な指摘が得られるかと。
基本 丸投げは禁止なので、"全然分からない"というのであれば、
まず構造体(person)の宣言の仕方から確認されてはいかがでしょうか。
どこで詰まっているかを詳しくお願いします。
-----------------------------------------
①構造体が分からない
②動的確保の仕方が分からない
③ファイルからの入力の仕方が分からない
④データの表示のさせ方が分からない
-----------------------------------------
など。
プログラムの製作途中であれば、そのプログラムを載せた方が的確な指摘が得られるかと。
基本 丸投げは禁止なので、"全然分からない"というのであれば、
まず構造体(person)の宣言の仕方から確認されてはいかがでしょうか。
Re:構造体についての質問です。
ちょっと作ってみました。
まずはデータファイルを作ります。
これはコンパイラによってはエラーになるかも。
で、次にメインのプログラムです。
こんなもんでどうでしょう?
適当に作ったので、ファイルは、"data" というファイル限定です (^^;
まずはデータファイルを作ります。
これはコンパイラによってはエラーになるかも。
#include <stdio.h> int main(void) { int i = 3; typedef struct { int no; char *name; int age; } person; FILE *fp; person data[/url] = { {1,*(char **)"田中",20},{2,*(char **)"大田",40},{3,*(char **)"井上",35} }; fp = fopen ("data","wb"); if (fp == NULL) exit(1); fwrite( &i, sizeof (int), 1, fp); fwrite( data, sizeof (person), 3, fp); fclose(fp); return 0; }
で、次にメインのプログラムです。
#include <stdio.h> #include <stdlib.h> int main() { typedef struct { int no; char *name; int age; } person; int no; int i; person *data; FILE *fp = fopen("data","rb"); if (fp == NULL) exit(1); fread(&i, sizeof(int), 1, fp); data = malloc(sizeof(person) * i); if (data == NULL) exit(1); fread(data, sizeof(person), i, fp); for (no = 0; no < i;no++) { printf("%d %.4s %d\n", data[no].no, &data[no].name, data[no].age); } fclose (fp); return 0; }
こんなもんでどうでしょう?
適当に作ったので、ファイルは、"data" というファイル限定です (^^;