#include <algorithm>
#include <stdio.h>
#include <iostream>
int intcomp(int *x,int *y) { return *x-*y;};
int a[10000];
int main(void){
int i; int n=0;
while (scanf("%d",&a[n])!=EOF)
n++;
qsort(a,n,sizeof(int),intcomp);
for (int i=0;i<n;i++)
printf("%d\n",a[i]);
return 0;
}
它只是代码的副本我有两个问题它告诉我intcomp在这段代码中是不兼容的 还有什么intcomp功能? 还有Windows 7 EOF中的内容?如何告诉程序它达到了EOF?
答案 0 :(得分:4)
qsort()函数需要一个带有特定签名的指针 你的函数签名错误,所以抱怨。
您的功能有签名:
int intcomp(int *x,int *y)
虽然qsort需要签名:
int intcomp(void const* xp,void const* yp)
请注意参数类型的不同。
该功能的更正版本为:
int intcomp(void const* xp,void const* yp)
{
// Modified for C as the tag on the question changed:
// int x = *static_cast<int const*>(xp);
// int y = *static_cast<int const*>(yp);
int x = *((int const*)(xp));
int y = *((int const*)(yp));
return x-y;
}
函数qsort()传递一个函数指针作为第三个参数 此函数指针(在您的情况下为intcomp())用于比较传递的数组中的值。每次调用都提供指向数组的指针。该函数的结果应该是:
Less than 0: if x is smaller than y
0: If x is equal to y
Greater than 0: If x is larger than y
答案 1 :(得分:1)
intcomp
是一个“Int Compare”函数。它传递一个指向2个int的指针,如果它们是相同的则返回0,正值是x> 1。 y和负值是x <收率
qsort
传递一个指向此函数的指针,并在每次想要知道如何对一对值进行排序时调用它。
qsort
的文档应该为您提供更多详细信息
例如http://www.cppreference.com/wiki/c/other/qsort
答案 2 :(得分:1)
qsort
位于stdlib.h
,因此请在开头添加该文件。请注意,不需要algorithm
和iostream
。
#include <stdlib.h>
答案 3 :(得分:1)
首先:问题标记为C ++,你#include&lt; algorithm&gt;和&lt; iostream&gt;,但您的代码是100%C。
Martin York已经给出了如何纠正传递给qsort()的函数签名的答案。
然而,“真正的”(TM)C ++解决方案是使用std :: sort&lt;&gt;而不是qsort!
#include <algorithm>
#include <stdio.h>
bool intcomp(int a, int b) { return a<b; }
int a[10000];
int main(void){
int n=0;
while (scanf("%d",&a[n])!=EOF)
n++;
std::sort(&a[0], &a[n], intcomp);
for (int i=0;i<n;i++)
printf("%d\n",a[i]);
return 0;
}
请注意,incomp()接受int而不是int指针,并返回bool。就像运营商&lt;()一样。
另请注意,在这种情况下,您可以忘记intcomp并只使用std :: sort(&amp; a [0],&amp; a [n]),这将使用std :: less&lt;&gt ;,将使用运算符&lt;(int,int)。
答案 4 :(得分:0)
正如Martin York所说,qsort需要一个用来比较值的函数:
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void*, const void *) );
以下是有关如何使用qsort的一个很好的示例:http://www.cppreference.com/wiki/c/other/qsort
编辑:Ri更快......