C语言物理力实验计算器计算结果与scanf输入不匹配问题求助
问题分析与修复方案
核心问题清单
- 变量类型错误:百分比计算结果是带小数的浮点数,但你把
difference_percentage1/2/3定义为int类型,直接赋值会截断小数部分,导致结果严重偏离预期。 - 冗余代码干扰:末尾的
getchar()会读取输入缓冲区残留的换行符,可能导致程序无意义等待额外输入。
修正后的代码
// main.c #include <stdio.h> int main() { char name[20]; int month, date; // 改为double类型保留小数精度 double difference_percentage1, difference_percentage2, difference_percentage3; double force1, force2, force3; scanf("%s", name); scanf("%d %d", &month, &date); scanf("%lf %lf %lf", &force1, &force2, &force3); double Favg = (force1 + force2 + force3) / 3.0; puts(name); // 直接计算为浮点数,保留完整精度 difference_percentage1 = 100 * (force1 - Favg) / Favg; difference_percentage2 = 100 * (force2 - Favg) / Favg; difference_percentage3 = 100 * (force3 - Favg) / Favg; // 用%.2f控制输出两位小数,符合物理实验精度需求 printf("%.2f %.2f %.2f\n", difference_percentage1, difference_percentage2, difference_percentage3); return 0; }
关键修改说明
- 类型调整:将百分比变量改为
double,避免小数部分被截断,保证计算精度。 - 输出格式匹配:用
%.2f替代%d,匹配double类型变量,同时控制小数位数让结果更直观。 - 移除冗余代码:删掉无意义的
getchar(),避免程序运行异常。
测试示例
输入:
Alice 10 25 10 12 14
输出:
Alice -16.67 0.00 16.67
这个结果符合物理实验的百分比偏差计算逻辑,原程序会因截断输出-16 0 16,与实际偏差不符。
内容的提问来源于stack exchange,提问作者annazxc
相关产品推荐
相关产品推荐

