#include <stdio.h>
int main()
{
double dMinimum;
double dMaximum;
char szName[] = "Armvad Ezikon";
double dScoreM[] = { 40, 0, 30, 55, 0, 25 };
int iScoreCount = 6;
determineMinMax(dScoreM, iScoreCount , &dMinimum, &dMaximum);
printf("For %s, minimum = %lf and maximum = %lf ", szName, dMinimum, dMaximum);
return 0;
}
void determineMinMax( double dScoreM[] , int iScoreCount , double *pdMin, double *pdMax)
{
int i;
*pdMin = 200.0; // arbitrary high value
*pdMax = 0.0;
for(i = 0; i < iScoreCount; i++)
{
if(dScoreM[i] < *pdMin)
*pdMin = dScoreM[i];
if(dScoreM[i] > *pdMax)
*pdMax = dScoreM[i];
}
}
When I try to compile I get this error is it because I am not casting correctly?
exampleone.c:13:6: warning: conflicting types for ‘determineMinMax’ [enabled by default]
void determineMinMax( double dScoreM[] , int iScoreCount , double *pdMin, ^ exampleone.c:9:1: note: previous implicit declaration of ‘determineMinMax’ was here determineMinMax(dScoreM, iScoreCount , &dMinimum, &dMaximum);
答案 0 :(得分:3)
You have to put the declaration before using it :
void determineMinMax( double dScoreM[] , int iScoreCount , double *pdMin, double *pdMax);
int main(void){
..
}
Or simply,
void determineMinMax( double dScoreM[] , int iScoreCount , double *pdMin, double *pdMax){
...
}
int main(void){
...
}
Otherwise it is conflicting with the implicit declaration assumed by the compiler which is int determineMinMax()
. But in C99,C11 this is an error.
答案 1 :(得分:0)
#include <stdio.h>
#include <limits.h>
void determineMinMax (double dScoreM[], int, double*, double*);
int main(int argc, const char*argv[])
{
double dMinimum,dMaximum;
char szName[] = "Armvad Ezikon";
double dScoreM[] = { 40, 0, 30, 55, 0, 25 };
int iScoreCount = 6;
determineMinMax(dScoreM, iScoreCount , &dMinimum, &dMaximum);
printf("For %s, minimum = %lf and maximum = %lf ", szName, dMinimum, dMaximum);
return 0;
}
void determineMinMax ( double dScoreM[] , int iScoreCount , double *pdMin, double *pdMax)
{
int i;
//initialize *pdMin and *pdMax with the first element of the array, just an assumption.
*pdMin = 40;
*pdMax = 40;
//You can use the following way also for initialization.
//*pdMin = (INT_MAX);
//*pdMax = -(INT_MAX);
for(i = 0; i < iScoreCount; i++)
{
if(dScoreM[i] < *pdMin)
*pdMin = dScoreM[i];
if(dScoreM[i] > *pdMax)
*pdMax = dScoreM[i];
}
}
上面的代码将解决您的问题,根据C99和C11,您需要首先声明函数的签名/原型然后定义该函数,或者您需要在从{{{ 1}}功能。
在这种情况下,签名告诉编译器,我已经声明了函数名main()
,它将四个参数作为输入,并且返回determineMinMax
对于调用它的函数没有任何意义,在你的情况下是void
。
答案 2 :(得分:0)
您收到警告是因为您没有向前声明函数determineMinMax
,而是在main
中调用了它。编译器假定它的返回类型为int,并且它接受任意数量的参数,这使得它的原型看起来像:int determineMinMax();
这就是为什么编译器会警告你有关冲突类型的原因,因为编译器假定的函数的签名与函数的签名不同。
要解决此问题,只需在main
之前添加该函数的原型:
void determineMinMax(double dScoreM[], int iScoreCount, double *pdMin, double *pdMax);
int main(void) {
...
}
void determineMinMax(double dScoreM[], int iScoreCount, double *pdMin, double *pdMax)
{
....
}