i'm trying to sort a array using qsort() but i just get junk printed. It probably has something to do with my pointers but i can't find what's wrong.
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include "lab41.h" person *personer[10]; int fillen; int readfil(FILE *filen) { int counter = 0; int c; char mystring[100]; person *p1; while((c = fgetc(filen)) != EOF) { p1 = malloc(sizeof(person)); fscanf(filen,"%s", &p1->fnamn); fscanf(filen,"%s", &p1->enamn); fscanf(filen,"%d", &p1->alder); fscanf(filen,"%d", &p1->vikt); personer[counter] = p1; /*--------test ---------*/ printf("%s", personer[counter]->fnamn); printf(" "); printf("%s", personer[counter]->enamn); printf("\n"); printf("%d", personer[counter]->alder); printf("\n"); printf("%d", personer[counter]->vikt); printf("\n"); /*--------slut test-------*/ counter++; } fillen = counter; printf("\n---------------co--END---------------\n"); return 0; } int critter_cmp_namn (person *p1, person *p2) { return strcmp (p1->fnamn, p2->fnamn); } int skriv_ut_personer(FILE *filen, int val) { int counter = 0; while(counter < (fillen-1) ){ if(val == 1) { fprintf(filen, "%s ", personer[counter]->fnamn); fprintf(filen, "%s\n", personer[counter]->enamn); fprintf(filen, "%d\n", personer[counter]->alder); fprintf(filen, "%d\n", personer[counter]->vikt); } else if (val == 0){ fprintf(stderr, "%s ", personer[counter]->fnamn); fprintf(stderr, "%s\n", personer[counter]->enamn); fprintf(stderr, "%d\n", personer[counter]->alder); fprintf(stderr, "%d\n", personer[counter]->vikt); } counter++; } return 0; } int meny() { int val; char filnamn[40]; FILE *filen; printf("\nMENY\n"); printf("1. Sotera efter namn\n"); printf("2. Sotera efter alder\n"); printf("3. Sotera efter vikt\n"); printf("4. Skriv ut till fil\n"); printf("5. Skriv ut till terminal\n"); printf("Ditt Val: "); scanf("%d", &val); if(val == 1) { qsort (*personer, fillen, sizeof (person), critter_cmp_namn); meny(); } else if (val == 2) { } else if(val == 3) { } else if(val == 4) { printf("Fil att skriva till: "); scanf("%s", &filnamn); if((filen = fopen(filnamn, "w")) == NULL) { printf("går ej att skapa/öppna fil"); meny(); } skriv_ut_personer(filen, 1); } else if(val == 5) { skriv_ut_personer(NULL, 0); } else { printf("felaktigt val"); meny(filen); } return 0; } void main() { int ett; FILE *filen; int val; char filnamn[40]; enum filtyp {db,txt,bin}; typedef enum filtyp filtyp; printf("Skriv filnamn: "); scanf("%s", &filnamn); if((filen = fopen(filnamn, "r")) == NULL) { printf("file don't exist"); exit(1); } readfil(filen); meny(); close(filen); scanf("%d", ett); }



LinkBack URL
About LinkBacks



