所以我使用C,我似乎无法得到这个工作正确。它是包含一些联系信息的结构体的指针数组。我似乎无法得到qsort排序正确。 这里是我的代码qsort不排序和奇怪的输出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
#define ELEMENTS 50
int sortZips(const void *a, const void *b);
typedef struct contactInfo {
char name[MAX];
char street[MAX];
char cityState[MAX];
char zipCode[MAX];
} contacts;
int main() {
int i = 0;
contacts **contactArray = malloc(ELEMENTS * sizeof(contacts *));
/* allocate array */
for (i = 0; i < ELEMENTS; i++) {
contactArray[i] = malloc(sizeof(contacts));
}
/* populate array */
for (i = 0; i < ELEMENTS; i++) {
fgets(contactArray[i]->name,MAX,stdin);
fgets(contactArray[i]->street,MAX,stdin);
fgets(contactArray[i]->cityState,MAX,stdin);
fgets(contactArray[i]->zipCode,MAX,stdin);
printf("%s", contactArray[i]->name);
printf("%s", contactArray[i]->street);
printf("%s", contactArray[i]->cityState);
printf("%s", contactArray[i]->zipCode);
}
printf("\n");
/* qsort((void *)contactArray, ELEMENTS, sizeof(contacts *), sortZips); */
for (i = 0; i < ELEMENTS; i++) {
fputs(contactArray[i]->name,stdout);
fputs(contactArray[i]->street,stdout);
fputs(contactArray[i]->cityState,stdout);
fputs(contactArray[i]->zipCode,stdout);
}
}
/* sortZips() sort function for qsort */
int sortZips(const void *a, const void *b) {
const contacts *ia = *(contacts **)a;
const contacts *ib = *(contacts **)b;
return strcmp(ia->zipCode, ib->zipCode);
}
输出打印地址(我有50个输入文件),然后一些随机字符,像他们这样的一个巨大的块,然后排序列表之后被搞砸并没有排序的权利。
请任何帮助,将不胜感激。我需要知道这里出了什么问题,为什么。 Thanx。
是啊我看到我应该专注于输入功能,看看混乱开始的地方。我正在考虑这种排序,以及我是否正确地访问了结构的成员。这让我感到困惑。在此之前,我从来没有使用过qsort,并且在将void *传递给排序函数的过程中遇到了一些麻烦。 – Hasen 2011-05-25 04:56:11