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

C语言程序无语法错误,evdomadiaia_amoivh输出为科学计数法不符合预期

问题分析与解决

问题根源

你遇到的科学计数法输出,是因为printf中使用的%g格式符特性导致的:%g会自动选择最短的数值表示形式,当计算出的evdomadiaia_amoivh数值过小(比如小于0.0001)或过大(比如大于等于100000)时,就会切换为科学计数法输出。而你直接赋值测试时用的是常规范围的数字,所以输出正常。

解决方案

要强制以常规十进制格式展示薪资,把printf中的%g替换为以下格式之一:

  • %f:固定以小数形式输出,默认保留6位小数
  • %.2f:指定保留2位小数(适配薪资类场景的展示习惯)
  • %.0f:若不需要小数部分,直接输出整数

同时补充一个规范细节:scanf读取double类型变量时,标准格式符是%lf,虽然%g在部分编译器中能工作,但为了代码可移植性,建议替换。

修改后的完整代码:

#include <stdio.h>

int main(){
long kwdikos;
double ethsios_misthos, evdomadiaia_amoivh, amoivh_ana_ora;
int ores_ergasias;

printf("Dwse ton kwdiko: ");
scanf("%ld", &kwdikos);

if (kwdikos >= 1000){
    printf("Dwse ton ethsio mistho: ");
    scanf("%lf", &ethsios_misthos);
    evdomadiaia_amoivh = ethsios_misthos / 52;
    printf("H evdomadiaia amoivh einai: %.2f\n", evdomadiaia_amoivh);
}
else{
    printf("Dwse tis ores evdomadiaias ergasias: ");
    scanf("%d", &ores_ergasias);
    printf("Dwse thn amoivh ana ora: ");
    scanf("%lf",&amoivh_ana_ora);
    if (ores_ergasias > 40){
        evdomadiaia_amoivh = 40 * amoivh_ana_ora + (ores_ergasias - 40) * 1.5 * amoivh_ana_ora;
    }
    else{
        evdomadiaia_amoivh = ores_ergasias * amoivh_ana_ora;
    }
    printf("H evdomadiaia amoivh einai: %.2f\n", evdomadiaia_amoivh);
}
return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:29:53