1

私はカーニハンの本「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;
}
4

2 に答える 2

5

関数は、配列generate()の最初の構造にのみアクセスします。そこで、そのループインデックスstudentを使用する必要があります。for

 for (i = 0; i < 10; i++)
 {
     students[i].id = (rand()%10 + 1);
     students[i].score = (rand()%(100 - 0 + 1) + 0);
     printf("%d, %d\n", students[i].id, students[i].score);
 }
于 2013-01-12T22:46:41.710 に答える
1

生成をに変更

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[i].id = (rand()%10 + 1);
       students[i].score = (rand()%(100 - 0 + 1) + 0);
       printf("%d, %d\n", students[i].id, students[i].score);
    }
}
于 2013-01-12T22:51:21.577 に答える