数组结构排序 - C.

时间:2017-01-03 17:01:41

标签: c arrays sorting

我想对一个strut-array进行排序,我不断遇到某个问题而且我不知道为什么

#include <stdio.h>
#include <stdlib.h>
#define STRLEN 20

 void BubbleSort(int a[], int array_size);

struct schueler
{
    char vorname[STRLEN];
    char nachname[STRLEN];
    char klasse[6];
    char gbdatum[9];
    double geld;
};

int main()
{
    int anz;
    int count = 1;
    printf("Wieviele Schueler moechten Sie eingaben: ");
    scanf("%d",&anz);
    struct schueler personen[anz];
    while(count <= anz)
    {
        printf("\n\nSchueler %d:\n\n", count);

        printf("\nNachname: ");
        scanf("%s",&personen[count].nachname);

        printf("\nVorname: ");
        scanf("%s",&personen[count].vorname);

        printf("\nKlasse: ");
        scanf("%s",&personen[count].klasse);

        printf("\nGeburtsdatum");
        scanf("%s",&personen[count].gbdatum);

        printf("\nGeld: ");
        scanf("%d",&personen[count].geld);

        count++;
    }
    BubbleSort(&personen, anz);
    system("CLS");
    for(count = 1; count <= anz; count++)
    {
        printf("Schueler %d:\n\n", count);
        printf("Nachname: ", personen[count].nachname);
        printf("Vorname: ", personen[count].vorname);
        printf("Klasse: ", personen[count].klasse);
        printf("Geburtsdatum: ", personen[count].gbdatum);
        printf("Geld: ", personen[count].geld);
    }
}

 void BubbleSort(int a[], int array_size)
 {
     int i, j, temp;
     for (i = 0; i < (array_size - 1); ++i)
     {
          for (j = 0; j < array_size - 1 - i; ++j )
          {
               if (a[j].nachname > a[j+1].nachname)
               {
                    temp = a[j+1].nachname;
                    a[j+1].nachname = a[j].nachname;
                    a[j].nachname = temp;
               }
          }
     }
 }

问题是

  

错误:在非结构或联合的情况下请求成员'nachname'

2 个答案:

答案 0 :(得分:1)

error: request for member 'nachname' in something not a structure or union
    if (a[j].nachname > ...

a是指向int 而非指向struct schueler的指针,因此所指的成员{ {1}}。

修复此更改

nachname

void BubbleSort(int a[], int array_size)

并像这样称呼它

void BubbleSort(struct schueler a[], int array_size)

答案 1 :(得分:0)

要对数组进行排序,请使用qsort。我对用于比较字符串(>)的a[j].nachname > a[j+1].nachname操作不是很清楚,但这是一个副作用