私はカーニハンの本「Cプログラミング言語」を使って、今春のデータ構造クラスの準備としてCを自分自身に教えようとしています(Cは必須の前提条件です)が、複数の構造を処理する方法と保存する方法に固執しています。後で計算と出力に使用する倍数。次のIDとスコアの変数を使用して、学生レコードに関連する構造のコードをいくつか作成しました。関数名とパラメーターはそのままにしておく必要があり、コメントは各関数で何をすべきかを説明しています。
これが私が試したことです。次のように、allocate関数内に10人の学生用の構造体の配列を設定することを考えました。
struct student s[10];
ただし、mainに戻してから生成関数に渡そうとすると、非互換性エラーが発生します。私の現在の取り組みは以下のとおりです。ただし、ご覧のとおり、私のコードでは、生成された最後のレコードセット(つまり、student.idとstudent.score)以外は何も保存できません。明らかに、重要なコンポーネントが欠落しており、新しいIDを以前のIDと照合できないため、ランダムに一意の学生IDを生成できません。また、生徒のスコアを計算する関数を作成することもできません。任意の提案をいただければ幸いです。前もって感謝します。
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include<assert.h>
struct student{
int id;
int score;
};
struct student* allocate(){
/*Allocate memory for ten students*/
struct student* s = malloc(10 * sizeof(struct student));
assert (s != 0);
/*return the pointer*/
return s;
}
void generate(struct student* students){
/*Generate random ID and scores for ten students, ID being between 1 and 10, scores between 0 and 100*/
int i;
for (i = 0; i < 10; i++) {
students -> id = (rand()%10 + 1);
students -> score = (rand()%(100 - 0 + 1) + 0);
printf("%d, %d\n", (*students).id, (*students).score);
}
}
void deallocate(struct student* stud){
/*Deallocate memory from stud*/
free(stud);
}
int main(){
struct student* stud = NULL;
/*call allocate*/
stud = allocate();
/*call generate*/
generate(stud);
/*call deallocate*/
deallocate(stud);
return 0;
}