課題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
おてあげ

課題

#1

投稿記事 by おてあげ » 17年前

#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演算子を用いることで知ることができる。と課題には書いてました。
よろしくお願いします。

toyo

Re:課題

#2

投稿記事 by toyo » 17年前

課題に書いてある通りですね
#include <malloc.h> /* stdlib でもOK */
stu* date; /* dataのほうがいいと思う */
int main(void)
{
	int data_count;
	char cmd[2];
/* 
データ件数の入力処理(略)
*/
	date = (stu*)malloc(sizeof(stu) * data_count);

閉鎖

“C言語何でも質問掲示板” へ戻る