关于函数类型冲突的问题

时间:2021-03-14 20:26:35

标签: c

我是 C 的学生,我的函数中的变量类型有问题。这是一个函数,用于计算特定跨度内的资本和利率,并表示“capital_a_terme”存在冲突类型。

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

int main()
{
    float capital_initial, taux_interet_fixe, nb_annee_placement;
    printf("Saisir le capital initial.\n");
    scanf("%f", &capital_initial);
    printf("Saisir le taux d'interet fixe.\n");
    scanf("%f", &taux_interet_fixe);
    printf("Saisir le nombre d'annee de placement.\n");
    scanf("%f", &nb_annee_placement);
    printf("le capital a terme vaut : %f.\n", capital_a_terme(capital_initial, taux_interet_fixe, nb_annee_placement));
}

float capital_a_terme(float capital_initial, float taux_interet_fixe, float nb_annee_placement)
{
    if (nb_annee_placement == 0)
    {
        return capital_initial;
    }
    else
    {
        return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / 100, taux_interet_fixe, nb_annee_placement - 1));
    }
}

3 个答案:

答案 0 :(得分:8)

如果编译器不知道函数签名,它会将其返回类型默认为 int

由于 capital_a_terme 在编译器知道它的签名是什么之前被使用,它完全这样做,但是当它到达使用函数的行时它通知< /em> 类型与它认为的不匹配,因此编译失败并发出错误。

您需要在使用之前放置函数的原型,在这种情况下,在 main 之前:

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

// prototype here, before it's used
float capital_a_terme(float capital_initial, float taux_interet_fixe, float nb_annee_placement);

int main()
{
    float capital_initial, taux_interet_fixe, nb_annee_placement;
    printf("Saisir le capital initial.\n");
    //...

或者将实现向上移动到使用它之前,再次在 main 之前:

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

// Or the whole function here, before it's used
float capital_a_terme(float capital_initial, float taux_interet_fixe, float nb_annee_placement)
{
    if (nb_annee_placement == 0)
    {
        return capital_initial;
    }
    //... 
}

int main()
{
    float capital_initial, taux_interet_fixe, nb_annee_placement;
    printf("Saisir le capital initial.\n");
    //...

答案 1 :(得分:1)

你需要声明这个函数(在main之上),这样main就会识别出来。

另一方面你可以在main上面定义这个函数,然后main就会识别它。

函数的声明和定义是有区别的:

每个函数都需要声明,以便程序的其他部分能够识别它。

此外,您可以声明一个函数而无需定义它,并且您将能够编译并运行它。

但是,不声明就不能定义函数。

如果你在程序实际使用它的部分之上定义函数,那么定义也是它的声明。

希望你明白。

答案 2 :(得分:-1)

两件事:

  1. 将 return 语句隔开:
return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / 100, taux_interet_fixe, nb_annee_placement-1));
  1. 100 需要是一个浮点数:(根据我对 c 的非常有限的理解,这是我能弄清楚如何做到这一点的唯一方法,尽管您可能可以替换 onehundred使用 100f%f100,我真的不知道 tbh)
float onehundred = 100;
return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / onehundred, taux_interet_fixe, nb_annee_placement-1));