首页 > 解决方案 > 评估和打印键盘输入作为双重

问题描述

此代码不起作用。对于每一年,它将金额打印为 0.00 而不是计算结果

unsigned int counter;
double amount;
double principal;
double rate;
double year;

puts("Enter the principal, interest rate as a decimal and time in years, in that order:");
scanf("%f%f%f", &principal, &rate, &year);

for(counter = 1; counter <= year; ++counter){
    amount = principal * pow(1 + rate, counter);
    printf("Amount at the end of year %u is %.2f\n", counter, amount);

但是当我制作类型的本金、利率和年份时float,它会打印正确的值。

为什么将类型更改为float有效但double无效?

标签: c

解决方案


Inprintf %f是双精度的正确格式说明符。由于浮点数没有格式,因为如果您尝试将浮点数传递给printf,它将在printf接收之前提升为双精度。

scanf,如果你使用%f意味着你想读一个浮点数,%lf意味着你想读一个双精度数。因为你的变量是双精度的,你应该使用%lf,否则会导致未定义的行为,因为错误的格式说明符。


推荐阅读