Я использую этот глобальный кризис для изучения C помимо своих занятий, и я изучаю немецкую книгу (Rheinwerk Computing: C von A bis Z, ANSI-C99) и, наконец, достиг функций поиска. В качестве практики я хотел реализовать функцию сортировки для обеспечения функциональности бинарного поиска.
Моя проблема в том, что всякий раз, когда я добавляю новую zip-структуру, они не сортируются. Я уже просматривал различные вопросы здесь и узнал, как построить функцию сравнения для структур и как обрабатывать структуры с помощью qsort. Но похоже, что ответы не помогли, или я, вероятно, бросил, чтобы увидеть его.
Техническая среда: я использую vim и g cc (FLAGS: -Wpedanti c -Wstrict-aliasing -Wshadow -Wcast-align -Wextra -Wfloat-equal) в 32-битной подсистеме debian для windows. Так как g cc ни на что не жалуется при компиляции кода, мне интересно, что я сделал неправильно.
Мой код:
struct zipc
{
char place[255];
unsigned int zip;
};
struct zipc zipcodes[100];
static int N; //Counting how many adresses are already typed in
// create new zip with city, init function creates one with N=0 and dummy values
void insertbs(unsigned int p, char *o)
{
zipcodes[++N].zip = p;
strcpy(zipcodes[N].place, o);
}
int cmp_uinteger(const void *value1, const void *value2)
{
const struct zipc *p1 = value1;
const struct zipc *p2 = value2;
if(p1->zip > p2->zip)
return 1;
if(p2->zip > p1->zip)
return (-1);
else
return 0;
}
//usage of qsort later in main
qsort(zipcodes, N-1, sizeof(unsigned int), cmp_uinteger);
Функция cmp_uinteger вдохновлена другим вопросом здесь и кажется довольно хорошим, но сортировка всегда дает сбой, но не так, как это происходит с ошибкой программы. Программа работает, но если кто-то вставляет почтовые индексы в произвольном порядке, двоичный поиск завершается неудачно, поэтому я думаю, что речь идет о qsort (), но я могу быть где-то еще. Я думаю, что я не совсем понимаю смысл функции сравнения, может быть, кто-то тоже может это объяснить.
Мне кажется странным размещать мой первый вопрос здесь, потому что переполнение стека стало моим вторым домом во время урока C: D
С наилучшими пожеланиями, Maleware