**Code A returns the correct conversion: 6.55957.**

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

    float convert(float currencyA)
    {
    float currencyB = 0;
    currencyB = 6.55957 * currencyA;
    return currencyB;
    }

    int main(int argc, const char *argv[])
    {

    float amount = 0;

    printf("How much\n");
    scanf("%f", &amount);


    printf("You get %f in currencyB", convert(amount));

    return 0;
    }

**Code B returns an incorrect conversion: 0.051247.**

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

double convert(double currencyA)
{
double currencyB = 0;
currencyB = 6.55957 * currencyA;
return currencyB;
}

int main(int argc, const char *argv[])
{

double amount = 0;

printf("How much\n");
scanf("%f", &amount);


printf("You get %f in currencyB", convert(amount));

return 0;
}

如果删除printf和scanf,并将1作为“amount”变量的值,则结果正确。
我怀疑是scanf造成了这个错误。如果是,那是为什么?
感谢您的阅读,并随时要求任何额外的信息,你需要。

最佳答案

double的正确格式说明符是%lf,而不是%f

关于c - C语言:scanf函数使用float和double类型会产生不同的结果吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22133566/

10-11 18:43