我只是想知道是否有办法让我将一个额外的参数传递给我的比较器,然后在我的qsort函数中使用它?
例如,我有这两个比较器(一个按升序排列,另一个按降序排列)
qsort(entries, 3, sizeof(struct entry), compare_desc);
int compare_asc(const void *elem1, const void *elem2)
{
return strcmp(elem1.name.last, elem2.name.last);
}
int compare_desc(const void *elem1, const void *elem2)
{
return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法,所以我可以做这样的事情:
int compare(const void *elem1, const void *elem2, const char *order)
{
if (strcmp(order, "asc") == 0)
return strcmp(elem1.name.last, elem2.name.last);
else if (strcmp(order, "desc") == 0)
return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是我的排序程序必须接受开关,如果我有2个不同的开关(+ a,-a)分别用于升序和降序,那么我必须制作2个不同的比较器功能.如果我添加更多,它会变得更复杂.有没有办法改进这个程序的设计?
编辑:不允许全局和外部变量.
c ×1