• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:構造体配列の動的確保/ポインタ配列の利用)

構造体配列の動的確保/ポインタ配列の利用

このQ&Aのポイント
  • 構造体配列(10 領域)を動的に確保した後に,ファイル「02student.txt」から情報を読込み,標準出力するプログラムを作成してください。
  • プログラムを作成して、構造体配列を動的に確保し、ファイルから情報を読み込んで標準出力する方法を解説します。
  • C言語で、構造体配列を動的に確保してファイルから情報を読み込むプログラムを作成する方法について説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • honor
  • ベストアンサー率35% (25/71)
回答No.2

作成しました。 #include<stdio.h> #include<stdlib.h> #define N 255 typedef struct student{ char str[N]; } STUDENT; int main(void){ int i = 0; FILE *fp; STUDENT * st = (STUDENT*)malloc(sizeof(STUDENT)*10); /* ファイルオープンの処理 */ fp = fopen("02student.txt", "r"); /* ファイル入力処理(ポインタ変数st を各領域を参照し,格納) */ /* 標準出力処理(ポインタ変数st から各領域を参照し,値を確認) */ while(fgets(i[st].str, N, fp)&&printf("%s", i++[st].str)); /* ファイルクローズの処理 */ fclose(fp); /* メモリの解放処理 */ free(st); return 0; }

その他の回答 (2)

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.3

真面目に自分で問題を解いてみませんか。 人の回答(適当に書かれた誤りが含まれているかも知れない答)を引き写したりしても実力は付きませんよ。 分らなかったらC言語の基礎(例えばカーニハン・リッチーの本等)から復習して下さい。 http://ja.wikipedia.org/wiki/プログラミング言語C それから複数のフィールドがあるデータをstringのままでは構造体を活用した事にはなりません。 学生番号、名前、性別、体重(?) があるようですから、それを反映した構造体(例えば次等)を宣言する必要があります。 typedef struct student{ int manno; char* name; char sex; // male='M', female='F'; or boolean, int 等で宣言する事も可能 int weight; } 入力は一行単位に読込み、string標準関数: string.h で宣言されているstrtok(....)等を使って 各fieldを切出し、必要な場合整数に変換してmanno, weightに代入する等の処理を繰返して下さい。 後は自分で解いて下さい。 なお、技術者向け > プログラミング > C・C++ のカテゴリも参照下さい。 http://okwave.jp/c250.html 同じ窓の検索窓で "C言語 入門" 等と調べてみて下さい。 ==> http://okwave.jp/qa/q6430041.html C言語 おすすめの本

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>プログラムを作成してください。 質問ではなく依頼のように見えますが。 そもそも、「02student.txt」とやらのデータ形式も不明ではなかなかに難しい問題なのですが、ちょっとがんばってみますか。 #include<stdio.h> #include<stdlib.h> typedef struct student{  char* data; } STUDENT; int main(void){   /* malloc 関数で動的確保(10 領域) */  STUDENT *st = malloc(sizeof(STUDENT) * 10);  /* ファイルオープンの処理 */  FILE* fp = fopen("02student.txt", "r");  for(i=0; i<10; i++){   /* ファイル入力処理(ポインタ変数st を各領域を参照し,格納) */   getc(fp);   switch(i){    case 0: st[i]->data = "14001 Aoki M 50"; break;    case 1: st[i]->data = "14002 Ishida F 60"; break;    case 9: st[i]->data = "14010 Kobayashi F 100"; break;    default: st[i]->data = ":"; break;   }  }  printf("【実行結果】\n");  for(i=0; i<10; i++){   /* 標準出力処理(ポインタ変数st から各領域を参照し,値を確認) */   printf("%s\n", st[i]->data);  }  /* ファイルクローズの処理 */  fclose(fp);  /* メモリの解放処理 */  free(st);  return 0; } こんなところですかね。