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

C语言克与毫克互转程序报错求助:输出始终为0

问题分析与修正方案

嘿,我来帮你排查这段代码输出始终为0的问题,主要有几个关键错误:

  • 格式符不匹配导致读取失败
    你定义的gram是double类型,但使用了scanf("%f", &gram)来读取输入——%f是专门用于读取float类型变量的格式符,读取double必须用%lf。这个错误会导致程序无法正确读取你输入的克数,最终gram的值还是初始的0,计算后自然输出0。

  • 单位转换逻辑完全搞反
    克转毫克的正确公式是 毫克 = 克 × 1000(因为1克=1000毫克),但你写的是mili=gram/1000,这相当于把克转换成了千克,逻辑完全错误,哪怕读取正确,结果也会是预期值的千分之一,输入小数值时就会显示为0。

  • printf参数不完整
    你代码里的printf语句末尾用了...,这里需要补上两个参数:gram(原始克数)和mili(转换后的毫克数),否则会触发未定义行为,输出结果不可控。

另外,补充一个小优化:用scanf("%c", &input)读取字符后,输入时的换行符会留在输入缓冲区里,可能影响后续输入,建议改成scanf(" %c", &input)(注意%c前面的空格,用于跳过空白字符)。

修正后的完整代码

#include<stdio.h> 
int main() { 
    char input; 
    double mili = 0, gram = 0; 
    printf("\n请输入转换方向(输入g表示克转毫克,输入m表示毫克转克)\n"); 
    scanf(" %c", &input); // 加空格跳过空白字符
    
    if (input == 'g') { 
        printf("\n请输入要转换为毫克的克数:\n"); 
        scanf("%lf", &gram); // 用%lf读取double类型
        mili = gram * 1000; // 修正转换逻辑
        printf("\n%.10lf 克转换为毫克是 %.10lf\n", gram, mili); // 补全参数
    } else if (input == 'm') {
        // 补充毫克转克的逻辑
        printf("\n请输入要转换为克的毫克数:\n");
        scanf("%lf", &mili);
        gram = mili / 1000;
        printf("\n%.10lf 毫克转换为克是 %.10lf\n", mili, gram);
    } else {
        printf("\n输入无效,请输入g或m!\n");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:19:38