【发布时间】:2017-02-18 10:10:02
【问题描述】:
我正在创建一个 C 代码以使用 qsort() 进行排序。我需要从用户那里获取一个数组,然后我需要从用户那里获取一个以升序打印这个数组,如果我想以降序打印它,则需要 d。问题是我需要使用函数指针来执行此操作。我尝试使用函数指针数组,但问题是用户需要输入两个字符。
#include <stdio.h>
#include <stdlib.h>
int a( const void *va , const void * vb )
{
const int * a = ( const int *) va ;
const int * b = ( const int *) vb ;
if (* a < *b ) return -1;
else if (* a > * b) return 1;
else return 0;
}
int d( const void *va , const void * vb )
{
const int * a = ( const int *) va ;
const int * b = ( const int *) vb ;
if (* a < *b ) return 1;
else if (* a > * b) return -1;
else return 0;
}
int main()
{
int *arr;
int n, i;
char c;
scanf("%d", &n);
arr=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d", &arr[i]);
}
while(1)
{
scanf("%c", &c);
getchar();
if(c=='e')
break;
qsort ( arr , n , sizeof(arr[0]) , d);
}
for(i=0;i<n;i++)
{
printf("%d", arr[i]);
}
return 0;
}
【问题讨论】:
-
网上有很多解决方法,搜索一下
-
注意:
a()的常用习语 --> return(* a > * b) - (* a < * b); -
C 不需要所有这些演员表。此外,它们可能会隐藏错误。只需删除它们。
-
在调用任何
scanf()系列函数时,始终检查返回值(而不是参数值)以确保操作成功。 -
堆分配函数(malloc、calloc、realloc)1)都有一个返回类型
void *,可以分配给任何其他指针。所以不需要转换返回值。强制转换只会使代码混乱,使其更难以理解、调试和维护。 2) 始终检查 (!=NULL) 返回值以确保操作成功。
标签: c arrays sorting function-pointers qsort