我是一名正在听c编程课程的学生,我正在使用c ++来“引用”#。我不知道如何准确地使用c ++,所以我使用c并将其保存到.cpp文件中。无论如何,我使用函数对数组进行排序,现在我有一个错误。我该怎么做才能解决这个错误?
#include <stdio.h>
#include <math.h>
double round(double value);
void sort(double a[],int cnt);
void swap(double& x,double& y);
int main()
{
int i;
double array[3];
for(i=0;i<3;i++){
scanf("%lf",&array[i]);
}
sort(array[3],3);
printf("%d %d %d",ceil(array[0]),floor(array[2]),round(array[1]));
return 0;
}
double round(double value)
{
return floor(value+0.5);
}
void sort(double a[],int cnt)
{
int i,j;
for(i=0;i<cnt-1;i++){
for(j=i+1;j<cnt;j++){
if(a[i]<a[j]){
swap(a[i],a[j]);
}
}
}
}
void swap(double& x,double& y)
{
int imsi=x;
x=y;
y=imsi;
}
答案 0 :(得分:5)
您的sort(double a[], int cnt)
函数作为第一个参数double a[]
,它是指向数组第一个元素的指针double*
的语法糖。但是在main()
中,您将其作为
sort(array[3], 3); // you pass a double here, not a double*
在上面的调用中,您传递数组array
的第4个元素,即double
,而不是指针double*
。要将指针传递给数组的第一个元素,请用
sort(array, 3); // you now pass a double* (i.e. pointer to first element of the array)
编译器基本上会告诉你错误:
错误:无法将参数'1'的'double'转换为'double *'为'void sort(double *,int)'sort(array [3],3);
预计double*
,但您传递double
。它会尝试将double
转换为double*
,但这种转换是不可能的,因此会出错。
答案 1 :(得分:2)
除了主要问题(已经由其他用户回答)之外,您应该更改swap()
功能,这样就不会使用int
来存储double
。这可能会导致意外行为。
答案 2 :(得分:0)
您将面临的下一个问题:
printf("%d %d %d",ceil(array[0]),floor(array[2]),round(array[1]));
对于print float,您可以使用"%f"
。
只需使用库cin
中的cout
和iostream
代替scanf
和printf
for(i=0;i<3;i++) {
std::cin>>array[i]>>' ';
}
for(i=0;i<3;i++) {
std::cout>>array[i]>>' ';
}
btw http://www.cplusplus.com/reference/可能会对您有所帮助。