0

ユーザーが次のことができるようにする特定のプログラムを c でコーディングするように依頼されました。

  • 生徒を追加
  • すべての生徒を見る
  • 学生を検索して終了

構造を使用して。プログラムは、学生のポータルのように機能する必要があります。この「暫定コード」をコンパイルすると、セグメンテーション エラー (コア ダンプ) のエラーが出力されます。だから、これは私のコードがどのようになるかです:

#include<stdio.h>

typedef struct tag1{
    int day, year, month;
}Date;

typedef struct tag2{
    int number;
    char name[50];
    char course[30];
    Date birthday;
}Record;



main(){
    int choice, n, i=0;
    Record student[200];

    //printing of menu:
    printf("Choose from the menu:\n");
    printf("     [1] Add Student\n");
    printf("     [2] Search Student\n");
    printf("     [3] View All\n");
    printf("     [4] Exit\n");
    scanf("%d", &choice);


    if((choice>=1)&&(choice<=4)){
        if(choice==1){

            printf("Enter student number:\n");
            scanf("%d", &student[n].number);    

            printf("Enter the name of the student:\n");     
            scanf("%[^\n]", student[n].name);

            printf("Enter month of birth:\n");
            scanf("%d", &student[n].birthday.month);

            printf("Enter day of birth:\n");
            scanf("%d", &student[n].birthday.day);

            printf("Enter year of birth:\n");
            scanf("%d", &student[n].birthday.year);

            printf("Enter course:\n");
            scanf("%[^\n]", student[n].course);

            n++;
        }
        if(choice==2){
        while(i<n){
            printf("%d\n", student[n].number);
            printf("%s", student[n].name);
            printf("%d/%d/%d", student[n].birthday.month, student[n].birthday.day,student[n].birthday.year);
            printf("%s", student[n].course);
            i++;
            }
        }
        }


    }

どのように学生を探すのか見当がつかないので、私はまだ道半ばでした。私のコードを改善するための提案があれば幸いです。

4

3 に答える 3

1

iを使用して、 n 番目の要素に到達するまで生徒を反復処理すると仮定します。

だからあってはならstudent[i]ないstudent[n]

これはうまくいくはずです:

//...

while(i<n){ 

      Record current = student[i]; 

      printf("%d\n", current.number);
      printf("%s", current.name);
      printf("%d/%d/%d", current.birthday.month, 
                   current.birthday.day,
                   current.birthday.year);
      printf("%s", current.course);

      i++;
}

はい、n は 0 に初期化する必要があります。

于 2013-03-10T04:50:59.870 に答える
0

nを初期化するのを忘れました(おそらくn = 0が必要です)。

于 2013-03-10T04:46:33.620 に答える
0

*生徒の秘密を守るには、次のように使用できます *

int sno;
unsigned char flag=0;
printf("Enter student number to search :");
scanf("%d",&sno);


次に、このレコードをすべてのレコードに検索し、いずれかのレコードに一致する場合、そのレコードを表示します。

for(i=0;i<n;i++) // where n is maximum number of records
{
     if(student[i].number == sno)
     {
         flag=1;
         /*** print all the member of student[i] ****/
         break;
     }
} // end of for loop
if(0==flag) { printf("\nSorry !!! Record not found with student number : %d\n",sno); }
于 2013-04-27T20:41:19.010 に答える