0

我对此很陌生,所以我确定这是一个业余错误。我正在尝试制作一个基本的财务计算器,并在尝试编译时不断遇到此错误:

findn.c:在函数“main”中:findn.c:36:3:警告:格式“%f”需要“float *”类型的参数,但参数 2 的类型为“double”[-Wformat] findn.c: 50:3:警告:格式“%f”需要“float *”类型的参数,但参数 2 的类型为“double”[-Wformat]

据我所知,参数浮点类型。是什么赋予了?还可以随时指出其他任何内容,我确定我的代码很草率。

#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);
    }
}
4

2 回答 2

2
if (userInput = 3)

这是错误的,在这里您不是再次比较 value 3,而是将 value 分配3userInput。使用相等运算符==而不是=赋值运算符。

然后:

scanf("%f", Pres3);

您必须将指针传递给Pres3. 利用:

scanf("%f", &Pres3);

反而。

这两个问题在您的程序的其他地方重复出现。

最后,main()不是main在 C 中声明的有效方式。使用int main(void).

于 2013-10-13T00:30:13.600 回答
2

你写scanf("%f", Pres3);而不是scanf("%f", &Pres3);. 它抱怨参数不是指针这一事实。

float和之间的混淆double可能是因为您在一台与 .float相同的机器上double

于 2013-10-13T00:31:32.350 回答