gpt4 book ai didi

c - C 中函数返回类型冲突

转载 作者:行者123 更新时间:2023-11-30 20:44:22 24 4
gpt4 key购买 nike

我正在研究C语言中的平均函数。平均函数是通过使用加法和除法函数来实现的。即avg(x,y)=div(add(x,y),2)。但错误发生为

"incompatible types when returning type 'div_t' but 'float' was expected"

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

int add(int,int);
float avg(int,int);
float div(int,int);
printf("%d",avg(50,20));
return EXIT_SUCCESS;
}

int add(int x, int y){
return x+y;
}
float avg(int x, int y){
return div(add(x,y),2);
}
float div(int x, int y){
return (x/y);
}

为什么会这样?

最佳答案

这里的主要问题是您声明的 div 函数与 header (stdlib.h) 中定义的函数冲突。例如,将函数重命名为 ddiv 将解决该特定问题。

第二个问题,正如其他评论者所指出的,是您在 main 体内提出了声明,因此函数 avg 无法看到 ddiv 的定义。这里的最佳实践是将所有前向声明移出,或者仅在其他函数的定义之后声明 main 函数并完全省略原型(prototype)。

第三个问题,就正确性而言,您的 div 函数正在对整数进行操作,因此不会给出小数的正确答案(因此将返回 50 code> 而不是 avg(50,51)50.5)。相反,您需要让 div 函数采用 float ,在这种情况下编译器会自动执行正确的操作,或者修改该函数来计算 (float)x/y.

最后一个问题是您在 printf 中使用 %d 来打印 float 。编译器很可能会对此发出警告,但如果没有,您会得到奇怪的行为。请改用 %f

关于c - C 中函数返回类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com