【发布时间】:2020-10-25 22:00:45
【问题描述】:
我必须编写一个程序,使用 qsort 和函数指针对整数数组进行排序。
编写一个对包含 n 个整数的数组进行排序的程序。读取 n 和数组的值后 从标准输入中,程序读取一个字符,如果这个字符是'a',那么排序 应该是升序,如果字符是“d”那么排序应该是降序,如果 字符是 'e' 那么程序应该退出执行。
这是我的代码,我不断收到错误消息:assignment of function 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))。请问我可以有一些反馈吗?我是完全错误地接近它还是应该只改变几件事?
#include <ctype.h>
#include <stdlib.h>
void quicksort(int *a, int n, int (*func)(char c))
{
qsort = (a, n, sizeof(int), func);
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
}
int compare(char c)
{
if (c == 'a')
return -1;
if (c == 'd')
return 1;
else
return 0;
}
int main()
{
int *a, n, i;
scanf("%d", &n);
a = (int *)malloc(sizeof(int) * n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
char c;
while (1)
{
scanf("%c", c);
if (c == 'e')
break;
quicksort(a, n, compare);
}
free(a);
return 0;
}
【问题讨论】:
-
qsort = (a, n, sizeof(int), func);尝试将值分配给qsort。您应该调用该函数而不是更改它。 -
而且
compare函数签名是错误的。阅读qsort manual 了解所需内容。也就是说,您对qsort的使用不正确。您需要编写一个比较两个整数的比较函数,而不是与a和d的固定值进行比较。
标签: c function pointers quicksort