[英]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件事:
return (capital_a_terme(capital_initial + capital_initial * taux_interet_fixe / 100, taux_interet_fixe, nb_annee_placement-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.