2

これが私がやろうとしていることです。ユーザーから 3 つのユーザー入力 (名前、年齢、性別) を取得していますが、これらの入力はすべて 1 つのレコードです。たとえば、 name=John、age= 15、gender= M の場合、これは John という人物のレコードです。

上記の例のように 5 つのレコードを作成しようとしていて、それを配列に格納しようとしています。問題は、私がそれを行う方法を知らないことです。

これが私がこれまでに行ったことです:

#include<stdio.h>
#include<conio.h>
#define Max 40


struct person{

    char name[Max];
    int age;
    char gender;

};

void inputdetails(struct person *,struct person []);

main()
{

struct person students[5]; //created an array type person to store the records

    struct person k;
    inputdetails(&k,students); //passed the array in to the input details function

}

void inputdetails(struct person *q,struct person hello[])
{
    int i=0;

    for(;i<5;i++)
    {
    printf("Enter name\n");
        gets(q->name);

    printf("Enter age\n");
    scanf("%d",&(q->age));

        fflush(stdin);
    printf("Enter gender\n");
    scanf("%c",&(q->gender));  


}

}

これを行うにはどうすればよいですか? 1つのレコード全体を配列に格納するにはどうすればよいですか?レコードを表示する関数を作成するときに、インデックス番号を指定するだけで、そのインデックスに格納されているレコードが表示されますか?

お時間をいただきありがとうございます。

4

2 に答える 2

2

次のように、forループを に移動します。main

int main() {
    struct person students[5]; //created an array type person to store the records
    for (int i = 0 ; i != 5 ; i++) {
        inputdetails(&students[i], i);
    }
    return 0;
}
void inputdetails(struct person *q, int pos) {
    // Put all the data into q->...
    printf("Enter name of student %d\n", pos);
    // Do not use gets(), it's a security hazard
    scanf("%39s", q->name);
    ...
}

現在の実装では不要な が作成さstruct person kれ、関数内でループが実行されinputdetailsます。2 番目の引数がサイズ 5 の配列を指していると想定されます。最後に、ループ内で、同じテンポラリーの要素を再割り当てし続けます(これはinsidestructを指します。これが、が満たされない理由です。kmain()students

inputdetails一度に1 つのエントリを読み取るように変更しました。main()は、データが配置される場所を担当します。印刷目的で生徒のシーケンス番号とともに、各要素へのポインタを順番に渡しますstudents[]

于 2013-06-10T13:29:57.793 に答える
0

構造体と配列の宣言は正しいです。(注: 上記の dasblinkenlight と同様の入力の詳細があると仮定します。)

配列の 1 つの要素 (たとえば、配列の最初の要素) をスキャンするには、次を使用します。

inputdetails(&students[0], int pos);

配列のすべての要素をスキャンするには、次の形式のループを使用します。

for(i=0; i<5; i++)
{
    inputdetails(&students[i], i);
}

それが役立つことを願っています。

于 2013-06-10T13:56:47.947 に答える