Witam. Mam problem z sortowaniem po ID w moim kodzie. Wyskakuje jakiś błąd. Prosiłbym o pomoc. Z góry dzięki!!!
#include <cstdio>
#include <windows.h>
#include <clocale>
#include <cstring>
#include "Utils.h"
#include <cstdlib>
#include <ctime>
typedef int (*CompFuncType)(const void*,const void*);
int CompareDrawnID(const SStudentData *aResult1, const SStudentData *aResult2)
{
return aResult1->ID - aResult2->ID;
}
void SortResultsByID()
{
qsort(Students, StudentCount, sizeof(SStudentData), (CompFuncType)CompareDrawnID);
}
struct SStudentData
{
char *FName;
char *LName;
unsigned int ID;
};
int StudentCount = 0;
SStudentData*Students = NULL;
void PrintDatabase()
{
for(int i=0; i<StudentCount; i++)
printf("%s | %s | %06d\n",
Students[i].FName,
Students[i].LName,
Students[i].ID);
printf("\n");
}
void AddRecord()
{
const unsigned int bufferSize = 256;
char strBuffer[bufferSize];
StudentCount++;
Students = (SStudentData*)realloc(Students, (StudentCount)*sizeof(SStudentData));
strBuffer[0] = 0;
GetString(strBuffer, bufferSize-1, "Podaj imie:");
Students[StudentCount-1].FName = (char*)calloc(strlen(strBuffer)+1,sizeof(char));
strcpy(Students[StudentCount-1].FName, strBuffer);
GetString(strBuffer, bufferSize-1, "Podaj nazwisko:");
Students[StudentCount-1].LName = (char*)calloc(strlen(strBuffer)+1,sizeof(char));
strcpy(Students[StudentCount-1].LName, strBuffer);
printf("Podaj nr indeksu:");
scanf("%d", &(Students[StudentCount-1].ID));
}
int main()
{
const int answerBufLen = 7;
char answer[answerBufLen];
bool exitProgram = false;
SetCP1250();
do
{
printf("1. Wyswietlenie wszystkich rekordow.\n");
printf("2. Dodanie rekordu.\n");
printf("3. Wyjscie z programu.\n\n");
printf("4. Sortowanie po ID.\n\n");
printf("5. Sortowanie po nazwisku.\n\n");
printf("6. Sortowanie po imieniu.\n\n");
GetString(answer, answerBufLen-1, "Wybierz opcje:");
if(strcmp(answer,"1")==0)
{
PrintDatabase();
}
else if(strcmp(answer,"2")==0)
{
AddRecord();
}
else if(strcmp(answer,"3")==0)
{
SortResultsByID();
}
/*}
else if(strcmp(answer,"4")==0)
{
}
else if(strcmp(answer,"5")==0)
{
}*/
else if(strcmp(answer,"6")==0)
{
exitProgram = true;
for(int i=0; i<StudentCount; i++)
{
free(Students[i].FName);
free(Students[i].LName);
}
free(Students);
}
else
{
printf("Podano nieprawidlowa opcje.\n");
}
}
while(!exitProgram);
return 0;
}