关于函数类型冲突的问题

eli*_*aud 2 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

ana*_*ciu 8

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

正如capital_a_terme在编译器知道它的签名是什么之前使用的那样,它正是这样做的,但是当它到达使用函数的行时,它注意到类型与它认为的不匹配,因此编译失败并且发出错误。

您需要在使用它之前放置函数的原型,在这种情况下,在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");
    //...
Run Code Online (Sandbox Code Playgroud)

或者将实现向上移动到使用它之前,再次使用之前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");
    //...
Run Code Online (Sandbox Code Playgroud)