You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

关键修改说明

  1. 类型调整:将百分比变量改为double,避免小数部分被截断,保证计算精度。
  2. 输出格式匹配:用%.2f替代%d,匹配double类型变量,同时控制小数位数让结果更直观。
  3. 移除冗余代码:删掉无意义的getchar(),避免程序运行异常。

测试示例

输入:

Alice
10 25
10 12 14

输出:

Alice
-16.67 0.00 16.67

这个结果符合物理实验的百分比偏差计算逻辑,原程序会因截断输出-16 0 16,与实际偏差不符。

内容的提问来源于stack exchange,提问作者annazxc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:45:34