簡體   English   中英

關於 function 類型沖突的問題

[英]Question about conflicting types for a function

我是 C 的學生,我的 function 中的變量類型有問題。 這是一個 function 來計算資本加上一定范圍內的利率,它說“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));
    }
}

如果編譯器不知道function 簽名,則默認其返回類型為int

由於在編譯器知道它的簽名是什么之前就使用了capital_a_terme ,它確實這樣做了,但是當它到達使用 function 的行時,它注意到類型與它認為的不匹配,所以編譯失敗並且發出錯誤。

您需要在使用之前放置 function 的原型,在這種情況下,在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");
    //...

您需要聲明這個 function(在 main 上方),所以 main 會識別它。

另一方面,您可以在 main 上方定義此 function,然后它將被 main 識別。

function 的聲明和定義之間存在差異:

每個 function 都需要聲明,因此程序的其他部分會識別它。

此外,您可以聲明 function 而不定義它,您將能夠編譯並運行它。

但是,您不能在沒有聲明的情況下定義 function。

如果你在實際使用它的程序部分上面定義了function,那么定義也是它的聲明。

希望你明白了。

2件事:

  1. 將 return 語句隔開:
return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / 100, taux_interet_fixe, nb_annee_placement-1));
  1. 100需要是一個浮點數:(根據我對 c 的非常有限的理解,這是我能弄清楚如何做到這一點的唯一方法,盡管你可以用100f%f100替換onehundred ,我真的不知道tbh)
float onehundred = 100;
return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / onehundred, taux_interet_fixe, nb_annee_placement-1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM