1

入学した生徒と生徒に関する情報をスキャンして構造化するプログラムを作成しました。そして、これらの入学した学生を生年と姓で並べ替える必要があります。どこから始めればいいのかわからないので、アドバイスをいただけないでしょうか。

#include <stdio.h>
#include <string.h>
#include <conio.h>
struct mon 
{
 char name[15];           /* vārds*/
    char lname[15];          /* uzvārds*/
 int day,month,year;      /* datums*/
 char gender[15];         /* dzimums*/
};
int main(void) 
{
 struct mon mm[5];
 int n;                   /* elementu skaits masīvā*/
 int i, j;
 for (n=0; n<2; n++)
 {
  printf("%d. Enter: name, gender, date, gender >", n+1);
  scanf("%s",mm[n].name);
      if (!strcmp(mm[n].name,"***")) break;
        scanf("%s",mm[n].lname);
  if (!strcmp(mm[n].lname," ,?!")) break;
  scanf("%d/%d/%d",  &mm[n].day, &mm[n].month, &mm[n].year);
        scanf("%s",mm[n].gender);
  if (!strcmp(mm[n].gender,"***")) break;
 }
 printf("-------------------------------------------------------------\n");
 printf("| Student  List |\n");
 printf("|-------------------------------------------------------------|\n");
 printf("|  Name  | Surname |    Date   | Gender |\n");
 printf("|---------|---------|-------------|---------|\n");
 for (i=0; i<n; i++)
 printf("| %7s | %7s | %d-%d-%d  | %7s |\n", mm[i].name,mm[i].lname,mm[i].day, mm[i].month, mm[i].year,mm[i].gender);
 getch();
 return 0;
}
4

1 に答える 1

0

最良の選択、読んqsort()で使用してください。

2 番目の選択肢: 並べ替え

int sorted;
do {
  sorted = 1;
  for (i=1; i<n; i++) {
    if (mm[i-1].year > mm[i].year) {
      struct mon temp;
      temp = mm[i-1];
      mm[i-1] = mm[i];
      mm[i] = temp;
      sorted = 0;
    }
  }
} while (!sorted);

これは年でのみソートされ、姓の部分は OP が追加するために残されています。

于 2013-11-13T23:19:23.007 に答える