2013-10-13 98 views
0

我很新,所以我確信這是一個業餘的錯誤。我試圖做一個基本的金融計算器,並保持運行到這個錯誤,當我嘗試編譯:GCC參數類型錯誤?

findn.c:在函數「主」: findn.c:36:3:警告:格式「% f'需要類型爲'float *'的參數,但參數2的類型爲'double'[-Wformat] findn.c:50:3:warning:格式'%f'需要'float *'類型的參數,但參數2有類型'雙'[-Wformat]

據我所知,參數一個浮點類型。是什麼賦予了?也可以隨意指出其他任何東西,我相信我的代碼是sl。不馴的。

#include <stdio.h> 
#include <math.h> 

void findN (float PV, float FV, float interest) 
{ 
float iDec = interest/100; 
float onePlusI = iDec + 1; 
float leftSide = FV/PV; 
float logOne = log(leftSide); 
float logTwo = log(onePlusI); 
float N = logOne/logTwo; 
printf("%f\n", N); 
} 

void findI (float PV, float FV, float N) 
{ 
float leftSide = FV/PV; 
float expN = 1/N; 
float iPlusOne = pow(leftSide, expN); 
float iDec = iPlusOne - 1; 
float interest = iPlusOne * 100; 
printf("%f\n", interest); 
} 

main () 
{ 
int userInput; 
printf("Press 1 to find Present Value, 2 to find Future Value, 3 to find Interest, or 4 to find Number of Periods\n"); 
scanf("%d", &userInput); 
if (userInput = 3) 
    { 
    float Pres3; 
    float Fut3; 
    float Num3; 
    printf("Enter Present Value\n"); 
    scanf("%f", Pres3); 
    printf("Enter Future Value\n"); 
    scanf("%f", &Fut3); 
    printf("Enter the Number of Periods\n"); 
    scanf("%f", &Num3); 
    findN(Pres3, Fut3, Num3); 
    } 

else if (userInput = 4) 
    { 
    float Pres4; 
    float Fut4; 
    float Int4; 
    printf("Enter Present Value\n"); 
    scanf("%f", Pres4); 
    printf("Enter Future Value\n"); 
    scanf("%f", &Fut4); 
    printf("Enter interest\n"); 
    scanf("%f", &Int4); 
    findN(Pres4, Fut4, Int4); 
    } 
} 

回答

2
if (userInput = 3) 

這是錯誤的,在這裏你是不是又比較看重3,要指定值3userInput。使用相等運算符==而不是=賦值運算符。

然後:

scanf("%f", Pres3); 

你有一個指針傳遞給Pres3。使用方法:

scanf("%f", &Pres3); 

改爲。

這兩個問題在您的程序的其他地方重複。

最後,main()不是在C中聲明main的有效方法。使用int main(void)

+0

'Pres4'有同​​樣的問題btw –

+0

是的,就是這樣。謝謝! – user2875108

2

您寫的scanf("%f", Pres3);而不是scanf("%f", &Pres3);。它抱怨的是,該參數不是指針

floatdouble之間的混淆可能是因爲你在一臺機器上,其中floatdouble相同。

+0

不,float和double之間的混淆是因爲當傳遞給可變參數函數如scanf時,float參數被提升爲double。 「float」和「double」從來都不是同一類型(即使它們碰巧是相同的大小,這很少見)。 –

+0

我沒有得到的是,爲什麼編譯器抱怨「參數2的類型是'double'」而不是uint16_t(或者指針大小是多少)。 –