課題
Posted: 2008年5月01日(木) 17:08
#include<stdio.h>
typedef struct {
char name[41];
char math[4];
char english[4];
char science[4];
}stu;
stu date[5];
int check = 0;
void read(void);
void print(void);
void print(void)
{
if(check == 0){
printf("error.\n");
return;
}
int i = 0;
for(; i < check; i++){
printf("%s\n%s\n%s\n%s\n\n",date.name, date.math,
date.english, date.science);
}
return;
}
void read(void)
{
if(check == 5){
printf("error.\n");
return;
}
int i = check;
FILE *fp;
char file[20];
printf("\nfile name>>");
fflush(stdout);
scanf("%s", file);
fp = fopen(file,"r");
if(fp == NULL){
printf("error.\n");
return;
}
fscanf(fp, "%s",date.name);
fscanf(fp, "%s",date.math);
fscanf(fp, "%s",date.english);
fscanf(fp, "%s",date.science);
date.name[40] = '\0';
date.math[3] = '\0';
date[i].english[3] = '\0';
date[i].science[3] = '\0';
fclose(fp);
check++;
return;
}
int main(void)
{
char cmd[2];
while(1){
printf("CMD>>");
fflush(stdout);
scanf("%s", cmd);
switch(cmd[0]){
case 'r' : read(); break;
case 'd' : print(); break;
case 'q' : return 0;
default : printf("error.\n"); break;
}
}
}上のプログラムを扱う成績データの件数に合わせて、配列のサイズをプログラム実行時に決定することにより、上記のような最大データ件数の制約を取り去るよう改良したいのですがどうすればいいんですか???
成績データを読み込む前に、まず成績データの件数を入力し、これをもとに配列の記憶領域を動的(プログラム実行時)に確保する。この動的記憶領域割り当ては、ライブラリ関数 malloc() を用いることによって可能である。関数 malloc() の使い方については、manコマンド等のマニュアルを参照せよ。また、変数や構造体を記憶するのに必要なメモリ量は、sizeof演算子を用いることで知ることができる。と課題には書いてました。
よろしくお願いします。