#include #include #include #include struct teilnehmer { char name[20]; int losnummer; }; #define MAXLOS 10 #define MAXTEILNEHMER 100 void drucke_teilnehmer(struct teilnehmer teilnehmer) { printf("%s\n", teilnehmer.name); } struct teilnehmer *lese_teilnehmer() { struct teilnehmer *teilnehmer; int ok; teilnehmer = malloc(sizeof *teilnehmer); ok = scanf("%s %d\n", teilnehmer->name, &teilnehmer->losnummer); if (ok != 2) { free(teilnehmer); return NULL; } else return teilnehmer; } int vergleiche_teilnehmer(const void *a, const void *b) { const struct teilnehmer *teilnehmer_a = a, *teilnehmer_b = b; return strcmp(teilnehmer_a->name, teilnehmer_b->name); } int main() { struct teilnehmer *teilnehmer, teilnehmerp[MAXTEILNEHMER]; int gewinnerlos, ok, i, n; srand(time(NULL)); gewinnerlos = rand() % MAXLOS; printf("Gewinnzahl: %d\n", gewinnerlos); for (n = 0; n < MAXTEILNEHMER; n++) { teilnehmer = lese_teilnehmer(); if (teilnehmer == NULL) break; teilnehmerp[n] = *teilnehmer; /* free(teilnehmer); */ } qsort(teilnehmerp, n, sizeof teilnehmerp[0], &vergleiche_teilnehmer); for (i = 0; i < n; i++) { if (teilnehmerp[i].losnummer == gewinnerlos) drucke_teilnehmer(teilnehmerp[i]); } }