C - 类型不匹配
问题描述:
我正在做我的功课,我不想让别人做我的功课我只想知道我的代码有什么问题。C - 类型不匹配
错误:
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c||In function 'main':| C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|28|error: invalid operands to binary > (have 'float *' and 'float')| C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|29|error: incompatible types when assigning to type 'float' from type 'float *'| C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|39|error: invalid operands to binary (have 'float *' and 'float')| C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|63|error: incompatible types when assigning to type 'float' from type 'float *'| ||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i ,j;
float arr[1000], max1=-999999999999999.0, max4=-999999999999999.0, min2=999999999999999.0, min3=999999999999999.0;
printf("Enter the number n: ");
scanf("%d", &n);
if(n<3||n>30)
printf("Worng entry!");
else
{
for(i=0;i<n;i++)
{
printf("Enter the elements of %d. row: ", i+1);
for(j=0;j<n;j++)
{
scanf("%f", &arr[i]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i>j && i<n-1-j)
{
if(arr[i]>max1)
max1=arr[i];
}
if(j>i && j<n-1-i)
{
if(arr[i]<min2)
min2=arr[i];
}
if(i>j && j>n-1-i)
{
if(arr[i]<min3)
min3=arr[i];
}
if(j>i && i>n-1-j)
{
if(arr[i]>max4)
max4=arr[i];
}
}
}
if(max1==max4 && min2==min3)
{
printf("Array is simetrical!\n");
printf("Elements: o1 = %.3f, o2 = %.3f, o3 = %.3f, o4 = %.3f", max1, min2, min3, max4);
}
else
{
printf("Array is not simetrical!\n");
printf("Elements: o1 = %.3f, o2 = %.3f, o3 = %.3f, o4 = %.3f", max1, min2, min3, max4);
}
}
return 0;
}
请问我的数组必须是二维?如果它是二维的,我的代码会给出错误的答案,如果它是一维的,则不会出现此错误。
答
似乎你的编译器混淆了。无论如何,max1 .. max4的初始值对于一个浮点数来说太大了。使用双。
我也注意到你做if(max1==max4 && min2==min3)
,但是,绝对比较两个浮点值是不好的做法。你应该比较它们在epsilon,机器精度内相等:
#define epsilon 0.0000000001; //(I don't say this value is correct; just an example)
#define ABS(a) (a<0?-a:a)
if(ABS(max1-max4)<epsilon && ABS(min2-min3)<epsilon)
+0
@Aleksandar Misich,感谢您的编辑。我注意到我的示例中有一个错误并更新了我的解决方案 – 2017-03-31 16:20:26
请张贴代码。看起来你在代码中使用了错误的指针。 – Haris 2014-12-02 15:43:11
'float'和'float *'是不同的类型。 – BLUEPIXY 2014-12-02 15:43:54
从所有的错误信息,我认为他很显然,他正试图使用一个指针作为浮动浮动,或不? – OiciTrap 2014-12-02 15:48:04