c - 参数错误的不兼容类型

标签 c eclipse

#include<stdio.h>
float functie(float vec[100],int dim2)
{
    int j;
    float suma,medie;
    for(j=1;j<=dim2;j++)
    {
        suma=suma+vec[j];
    }
    medie=suma/dim2;
    return medie;
}

int main()
{
    int dim ,i;
    float v[100],k;
    printf("Introduceti dimensiunea: ");
    scanf("%d",&dim);
    for(i=1;i<=dim;i++)
    {
        printf("v[%d]= ",i);
        scanf("%f",&v[i]);
    }
    k=functie(v[i],dim);
    printf("Date de iesire: %.2f",k);
    return 0;
}

我正在尝试对“暗淡”元素 vector 进行算术平均,
使用函数“functie”;但我收到此错误:

'incompatible type for argument 1 of 'functie'  problema3.c /problema3.c    line 23 C/C++ Problem'

错误出现在“k=functie(v[i],dim)”行。
我做错了什么?

最佳答案

这个

k=functie(v[i],dim);

使用 float 作为第一个参数调用 functie,该 float 位于数组 v 的位置 i 处。
您的函数被声明为具有数组类型的参数(该参数衰减为指向 float 的指针)。
所以你正在将一个 float 输入到需要指针 float 的东西中。
这就是编译器告诉你的。

为了解决这个问题,您应该检查有两个非常相似的循环的原因,
main 中的一个,将一个又一个的 float 提供给 functie
functie 内部的一个循环遍历所有数组,但它没有得到它。
一旦你决定了要在哪里循环,你会突然发现解决类型冲突很容易。
如果不知道您想要做什么,就不可能给出解决方案代码。

您的代码还存在其他问题,这些问题不在您的问题范围内。

例如,仅举几例:

  • 访问尺寸dim后面的数组元素,尽管这只对dim=100有效
  • 由于缺乏大小检查,可能输入太大的数组
  • scanf 返回值未检查
  • 无法从非数字输入中恢复

关于c - 参数错误的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802848/

相关文章:

c - 从文件中读取单词并将它们放入数组中

c - 使用 VS Studio 调试非常大的文件

c - 进程似乎不会减少信号量

eclipse - 自动完成的基本原理

c# - 如何从 javadoc 中排除某些类/包/公共(public)成员

c++ - 通过 cmake 文件在 Eclipse 中设置编译器特定设置和项目构建位置

c - 如何编译 C 程序以使二进制文件仅在不同的返回值上有所不同?

c - 线程安全地初始化一个指针一次

java - 为什么 documentUrl 返回 null

java - eclipse调试器不起作用的一个问题