#include #include #include #include #include #define SIZE 128 int compare(const void* p1, const void* p2); struct student { int pocetHlasov; char meno[SIZE]; char priezvisko[SIZE]; }; int main() { //citanie vstupu char line[SIZE]; memset(line,0, sizeof(line)); char* r = fgets(line,SIZE,stdin); if (r == NULL) { printf("Chyba: Zlyhalo nacitavanie vstupu.\n"); } //helper/pomocne lok. premeny char najdMeno [32]; char najdPriezvisko [32]; int najdPocetHlasov = 0; //array instancii struktur studentov struct student DBStudenti[20]; //prednastavenie pamati memset(DBStudenti, 0, sizeof(DBStudenti)); //pomocny index int x = 0; //spracovanie inputu, vycitavanie najdenych mien a najdenych poctov hlasov z retazca while (sscanf(line, "%d %s %s", &najdPocetHlasov, najdMeno, najdPriezvisko) != -1) { //prekopiruje najdene priezviska strcpy(DBStudenti[x].meno, najdMeno); strcpy(DBStudenti[x].priezvisko, najdPriezvisko); DBStudenti[x].pocetHlasov = najdPocetHlasov; x += 1; //reset nacitanych hodnot na konci kazdeho cyklu // memset(najdMeno, 0, SIZE); najdPocetHlasov = 0; } //zoradenie zoznamu, resp. arrayu qsort(DBStudenti, 20, sizeof(struct student), compare); //vypis vysledkov printf("Vysledky:\n"); for (int i = 0; i < 20; i++) { //20 je nahodne cislo, resp. realne budeme vypisovat userov //, pokial nenarazime na prazdny student ID zaznam if (DBStudenti[i].meno == '\0') { break; } //malo by vypisovat zaznamy takto: //10_Tomas_Vlcek printf("%d %s %s", DBStudenti[i].pocetHlasov, DBStudenti[i].meno, DBStudenti[i].priezvisko); } return 0; } int compare(const void* p1, const void* p2) { //casting, resp. premena dat. typu pointerov na ich spravny typ //nakolko qsort() pozaduje od porovnavaciej funkcie, aby akceptovala pointery s lubovolnym dat. typom (const void*) struct student *s1 = (struct student *)p1; struct student *s2 = (struct student *)p2; if (s1->pocetHlasov == s2->pocetHlasov) { //vrati lexikograficky zorad. instancie v poli (podla mena, NIE priezviska) return strcmp(s2->meno, s1->meno); } //vrati zaznamy zorad. zostupne return s2->pocetHlasov - s1->pocetHlasov; }