0

今回は、構造体をパラメーターとして使用することについてです。この課題では、FIFS キュー システムを作成する必要があります。静的な人のキューのサイズは 10 です。これは、キューに入れることができるのは 10 人だけであることを意味します。

静的タイプの変数 head、tail、および nbr_elem もあります。tail 変数は、特定の位置に人物を追加するために使用されます。可変ヘッドの場合はその逆です。nbr_elem はキュー内の人数です。私を助けるためにこれ以上の情報は必要ないと思います。今質問に:

関数のパラメーターとして構造体を使用するにはどうすればよいですか? これは私がこれまでに行ったことです:

    static person queue[QUEUE_MAX_SIZE];
static int head = 0, tail = 0, nbr_elem = 0;
 struct  person
{
    char first_name[7];
    char sur_name[10];
    char pers_nbr[10];

};


void person_info(struct person p1){


    /*printf("First name: ");*/
    scanf("%s", &p1.first_name[7]);
   /* printf("Last name: ")*/;
    scanf("%s", &p1.sur_name[10]);
    /*printf("Id-number: ");*/
    scanf("%s", &p1.pers_nbr[10]);
}

これまでのところすべて問題ありませんが、最初に strcpy-function を使用して inf をコピーし、それを配列 person queue[QUEUE_MAX_SIZE] に配置することで、struct person p1 をキューに配置する必要があります(?)

 void enqueue( person queue[QUEUE_MAX_SIZE])
{
    queue[person_info(p1.first_name[7])];
}

これが関数 enqueue の適切な開始であるかどうかさえわからないので、ここで助けが必要です。関数で静的な人物のキュー [QUEUE_MAX_SIZE] を使用するにはどうすればよいですか?

typedef person を含むヘッダー ファイル queue.h もあります。次に、このファイルである queue.c に対してヘッダー ファイルが呼び出されます。

4

1 に答える 1

1

機能付き

void person_info(struct person p1)

構造は値で渡されます。つまり、コピーが作成され、このコピーのみを変更します。参照によって渡したいのですが、C ではポインターとして渡すことによって行われます。

void person_info(struct person *p1)

ちなみに、関数をscanf呼び出すのは非常に間違っています。構造体インスタンスの配列を超えて書き込みます。たとえば、使用するだけです

scanf("%6s", p1.first_name);

あなたの質問を読み続けると、配列の使用方法について非常に基本的な誤解があるようです。そのため、戻って、最寄りの本またはチュートリアルで配列と配列のインデックス付けに関する章を読み直すことをお勧めします。

実際、配列の基本的な誤用を考えると、ポインターなどの概念をすぐに理解できるとは思えないので、そのテーマに関する本やチュートリアルも読んでみることをお勧めします。

于 2013-11-09T17:50:49.953 に答える