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", ðsios_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
相关产品推荐
相关产品推荐

