Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct
- {
- char name[20];
- int grades[10];
- int hianyzasok;
- }element;
- int rendez(element *a, element *b){
- //ki is lehet kényszeríteni void*ból
- int i, j, sum1, sum2;
- for(i = sum1 = sum2 = 0; i < 10; i++){
- if(a->grades[i] == 0)
- sum1++;
- if(b->grades[i] == 0)
- sum2++;
- }
- a->hianyzasok = sum1;
- b->hianyzasok = sum2;
- if(sum1 > sum2)
- return 1;
- if(sum1 < sum2)
- return -1;
- return strcmp(a->name, b->name);
- }
- int main(int argc, char **argv)
- {
- FILE *fp = fopen(argv[1], "rb"); // +b
- int i,j,k,l, in = atoi(argv[2]);
- //Dinamikus beolvasás
- int tsize = 5; //tömb eredeti mérete
- element *t = malloc(tsize * sizeof(element)); //helyek lefoglalása
- element be;
- for(l = 0; fread( &be, sizeof(element) - sizeof(int) , 1, fp) != 0; l++){
- // -sizeof int a hiányzások tárolása miatt
- //ha túlindexelnénk a tömböt, akkor növeljük a méretet, létrehozunk egy új tömböt, átmásoljuk az adatokat, és kicseréljük a mutatót az újra
- if(l >= tsize){
- tsize += 10;
- element *csere = malloc(tsize * sizeof(element));
- memcpy(csere, t, l * sizeof(element));
- free(t);
- t = csere;
- }
- t[l] = be;
- }
- //Dinamikus beolvasás
- printf("%d\n", l);
- //darabszám kiírása
- //innentõl kezdve rendesen lehet használni az adatokat
- qsort(t, l, sizeof(element), rendez);
- for(i = 0; i < l; i++){
- printf("%s (%d):", t[i].name, t[i].hianyzasok);
- for(j = 0; j < 10; j++)
- printf(" %d", t[i].grades[j]);
- puts("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement