-1

私の課題では、ユーザーが学生情報 (ID、生年月日、電話番号) を入力できる構造を作成する必要があります。これは非常に簡単です。ここで、学生 ID を使用して入力情報を検索し、生年月日と電話番号に対応する学生を表示する必要があります。これは、私が問題を抱えている問題です。私のプログラムに他の問題が見られる場合は、何が間違っているのか、なぜ変更する必要があるのか​​を教えてください。そうすれば、間違いから学ぶことができます。

また、学生情報のこれらのさまざまな部分をすべて配列に保存し、それらを互いに対応させる方法もわかりません。したがって、ID を検索するときに、正しい DOB と電話番号を返す方法を知るにはどうすればよいでしょうか。私はここで本当に迷っており、助けが必要です。あなたが私に何を言っても、またはコードを教えてくれるなら、あなたが私に言われたことをなぜ私がしなければならないのかを説明してください.

注: 私のクラスはすべてオンラインなので、教授に助けを求めるのは難しいので、皆さんに助けを求めました。

#include <stdio.h>
#include <stdlib.h>

struct infoStruct 
{
    int studentID;
    int year;
    int month;
    int day;
    int phone;
    int end;
};

int main (void)
{
    int students = 0;   
    int infoArray [students];
    struct infoStruct info;
    int studentID;
    int year;
    int month;
    int day;
    int phone;
    int end;



    while (info.end != -1) {
        students = students + 1;
        printf("Enter student information (ID, day, month, year, phone)\n");
        printf("Enter -1 following the phone number to end the process to continue enter 0\n");
        scanf("%d %d %d %d %d %d", &info.studentID, &info.day, &info.month, &info.year, &info.phone, &info.end);
    }
    if (info.end = -1){
        printf("You entered %d student(s)\n", students);
    }
    //Student Search
    printf("Please enter the student ID of the student your looking for\n.");
    scanf("%d", info.studentID);
    printf(" DOB: %d %d %d, Phone: %d", info.month, info.day, info.year, info.phone);

}
4

3 に答える 3

0

私はあなたがしたいことをもっとよく読む必要がありますが、コードを単純化するために、そしてそれを読む人のために、すべてをメインに書き込んで関数を分離しないでください。その後、その関数を呼び出すことができ、それらの名前により、プログラムの理解が深まります。

于 2013-11-08T15:01:27.203 に答える
0

では、学生 ID を使用して infoArray を検索する必要があります。まず第一に、配列をinfoStruct(学生を表す)タイプにしたいと思います。students配列の要素数です。

//storing the student info
for (int i=0;i<students;++i)
{
  scanf("%d %d[...]",&infoArray[i].studentID, &infoArray[i].year[...]);
}

たとえば、ID が id1 という学生を検索しているとします。次のようにします。

for (int i=0;i<students;++i)
{
  if (infoArray[i].studentID==id1)
  printf("%d",infoArray[i].phone);
}

あなたの質問をよく理解できたかどうかはわかりませんが、これがお役に立てば幸いです。

于 2013-11-08T15:01:32.247 に答える
0

最初に気付くのは...

初期化students = 0してから、呼び出された整数の配列のサイズinfoArrayを 0 に設定します。それがint infoArray[students]機能します。

次に、構造体のすべての要素を初期化する必要はありません。それが構造体の目的だからです。単に言うだけstruct infoStruct info;でうまくいくはずです。struct infoStruct *infoポインターを使用している場合 (つまり)、その構造体にメモリを割り当てるために malloc を使用する必要があることを忘れないでください。

ただし、構造体の配列を設定するには、1 行の単純なコードを使用します。 struct infoStruct info[x]x は、配列を作成する大きさです。上記のように x を 0 に設定し、配列に要素を追加しようとすると、メモリが割り当てられていないため segFault が発生することに注意してください。

最後に、for ループを使用してその配列を検索できるようになりました。

于 2013-11-08T15:37:23.710 に答える