2017-01-03 60 views
-2

我要排序的支柱陣列和我不斷收到一定的問題,我不知道爲什麼陣列結構排序 - Visual C

#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; 
       } 
      } 
    } 
} 

的問題是

error: request for member 'nachname' in something not a structure or union

+2

@SirPing函數的第一個參數void BubbleSort(int a [],int array_size);是無效的。它必須是struct schueler [] –

+1

這是什麼編譯器說的? –

+2

直到你的程序編譯警告免費(例如使用gcc例如),我們不能幫你。 – KevinDTimm

回答

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

a是指向int不是struct schueler,所以它指的是不是有一個成員nachname

要解決這一變化

void BubbleSort(int a[], int array_size) 

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

,並調用它像這樣

BubbleSort(personen, anz); /* note, that the & had been removed. */ 
0

爲了數組排序,使用qsort。我對>操作不太清楚,用於比較字符串(a[j].nachname > a[j+1].nachname),但這是一個側面問題