Я пытаюсь вызвать QSort с моим компаратором с использованием массива структур студента ' имеет атрибуты:компаратор не вызывая в QSort [Ошибка: Ожидается выражение перед тем компаратора]
typedef struct
{
int ID; // 4 bytes = 164 [+ int]
char firstname[NAME_LENGTH]; // 1 bytes * length (80) = 160 [2 * NAME_LENGTH]
char lastname[NAME_LENGTH]; // 1 bytes * length (80)
} Student;
Мой код пытается вызывать qsort из функции 3 раза: сортировать по идентификатору, затем имя, затем фамилию. Основная функция - вызов других функций для чтения и записи. Поиск ошибки в одном должен заставить меня применить ее к другой функции, правильно? Однако функции, связанные с сортировкой являются:
#ifdef TEST_SORTID
void StudentSortbyID(Student * stu, int numelem)
{
qsort(&(stu-> ID), numelem, sizeof(stu), compareInts);
}
#endif
#ifdef TEST_SORTFIRSTNAME
void StudentSortbyFirstName(Student * stu, int numelem)
{
qsort(&(stu-> firstname), numelem, sizeof(stu), compareStrings);
}
#endif
#ifdef TEST_SORTLASTNAME
void StudentSortbyLastName(Student * stu, int numelem)
{
qsort(&(stu-> lastname), numelem, sizeof(stu), compareStrings);
}
#endif
#ifdef TEST_COMPAREINTS
int compareInts(const void * argu1, const void * argu2)
{
const int * iptr1 = (const int *) argu1; //convert void to integer pointer
const int * iptr2 = (const int *) argu2;
int ival1 = * iptr1; //convert pointer to value
int ival2 = * iptr2;
if(ival1 < ival2) { return -1; } //return -1 if first value is less
if(ival1 > ival2) { return 1; } //return 1 if previous value is greater
if(ival1 == ival2) { return 0; } //return 0 if the adjacent values are equal
}
#endif
#ifdef TEST_COMPARESTRINGS
int compareStrings(const void * argu1, const void * argu1)
{
//String is an array of characters (string = char*) -> pointing to string
const char * const * sptr1 = (const char * *) argu1; //converting empty pointers to strings which point to characters [**]
const char * const * sptr2 = (const char * *) argu2;
const char * string1 = * sptr1; // a string is a character pointer
const char * string2 = * sptr2;
return strcmp(string1,string2);
}
#endif
Ошибки я получаю при запуске GCC является:
student.c:120: error: too few arguments to function ‘compareInts’
Я думал, что компаратор QSort в не принимает аргументы? Когда я пытаюсь поместить в 1-й два элемента массива, это тоже ошибки. Есть идеи?
И мы не должны разбирать, с какими линиями может возникнуть сообщение об ошибке? К сожалению, мы не являемся сервисом debugginmg. – Olaf
Вы объявляете функции сравнения перед вызовами qsort? – dromtrund
Извините, что ошибка возникла в строке 4 @Olaf –