小白求助,关于qsort函数的使用,求大神解答,谢谢

AXDii 2016-11-30 06:17:51
小白编写了一个程序如下:
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int i;
int a[]={12,32,42,51,8,16,51,51,19,9};
double b[]={32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5};
char *c[10]={"enter","number","size","begin","of","cat","case","program","certain","a"};
int cmp_1(const void *a,const void *b){return *(int *)a-*(int *)b;}
double cmp_2(const void *a,const void *b){return *(double *)a-*(double *)b;}
int cmp_3(const void *p1,const void *p2){return strcmp((char*)p2,(char*)p1);}
int main()
{
cout<<"排序前:\n";
for(i=0;i<sizeof(a)/sizeof(int);i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(b)/sizeof(double);i++)
cout<<b[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(c)/sizeof(char*);i++)
puts(c[i]);
qsort(a,sizeof(a)/sizeof(int),sizeof(int),cmp_1);
qsort(b,sizeof(b)/sizeof(double),sizeof(double),cmp_2);
qsort(c,sizeof(c)/sizeof(char *),sizeof(char *),cmp_3);
cout<<"\n排序后:\n";
for(i=0;i<sizeof(a)/sizeof(int);i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(b)/sizeof(double);i++)
cout<<b[i]<<" ";
cout<<endl;
for(i=0;i<sizeof(c)/sizeof(char*);i++)
puts(c[i]);
return 0;
}


打算调用qsort对数据进行排序,编译器报错如下:

\[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

In function 'int main()':
[Error] invalid conversion from 'double (*)(const void*, const void*)' to 'int (*)(const void*, const void*)' [-fpermissive]
72 0 E:\软件\Dev-C++\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\cstdlib In file included from E:/软件/Dev-C++/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/cstdlib
41 E:\软件\Dev-C++\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\ext\string_conversions.h -mingw32/4.9.2/include/c++/string
353 16 E:\软件\Dev-C++\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\stdlib.h [Note] initializing argument 4 of 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'


小白初学C++,还看不出哪里出了问题,求大神解答,谢谢。
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
AXDii 2016-11-30
  • 打赏
  • 举报
回复
谢谢楼上大神,问题已经得到解决
AlbertS 2016-11-30
  • 打赏
  • 举报
回复
函数cmp_2的返回值应该为int,而不是double
paschen 版主 2016-11-30
  • 打赏
  • 举报
回复
qsort第4个参数是个函数指针int (*)(const void*, const void*),这个函数指针指向的函数返回值需要是int 类型 但你的double cmp_2(const void *a,const void *b){return *(double *)a-*(double *)b;} 返回类型是 double

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧