c - 评估和打印键盘输入作为双重
问题描述
此代码不起作用。对于每一年,它将金额打印为 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
无效?
解决方案
Inprintf
%f
是双精度的正确格式说明符。由于浮点数没有格式,因为如果您尝试将浮点数传递给printf
,它将在printf
接收之前提升为双精度。
在scanf
,如果你使用%f
意味着你想读一个浮点数,%lf
意味着你想读一个双精度数。因为你的变量是双精度的,你应该使用%lf
,否则会导致未定义的行为,因为错误的格式说明符。
推荐阅读
- api - Google Vision API 操作 ID 格式无效
- reactjs - 客户端同时更新
- arrays - 将一维字符串 numpy 数组展平为一维浮点 numpy 数组的有效方法
- cuda - 优化 CalculateConvolutionOutputTensor__im2col
- javascript - RxJS TestScheduler 累积帧数
- html - 在Angular中将数据从父组件传递到子组件时出现HTML错误
- python - pip install rpy2==3.2.7 错误代码 1
- node.js - NodeJS 和 Express:“错误:自签名证书”
- excel - 我可以在 VBA 的函数中调用子程序吗?
- javascript - Webcrypto PBKDF2-SHA1