C语言程序运行输出始终为0.0000,请问代码哪里存在问题?
问题定位
- 核心错误为printf格式控制符与变量类型不匹配:代码中
seconds被定义为int整型变量,但输出时使用了仅支持浮点型的%f格式符,C语言中该类类型不匹配操作属于未定义行为,输出0.0000是此错误的典型表现。 - 逻辑计算错误:天转秒的换算系数错误,1天对应秒数为
24*60*60=86400,代码中使用的36400会导致计算结果本身错误。 - 逻辑顺序缺陷:代码先执行秒数计算,再校验输入天数是否合法,即使输入负数也会执行无意义的计算逻辑。
- 非标准写法:
void main(void)不属于C语言标准的主函数写法,标准写法为int main(void),执行结束后返回0代表程序正常退出。
修复后代码
#include <stdio.h> int main (void) { int days; long long seconds; // 改用长整型避免天数较大时出现整型溢出 printf("Enter the no. of days: "); scanf("%d", &days); // 输入校验前置,非法输入直接退出 if (days < 0) { printf("Invalid input!"); return 1; } seconds = days * 86400LL; // 加LL后缀保证运算按长整型执行 // 强制转换为double类型匹配%f格式符要求 printf("It is equal to %.5f seconds", (double)seconds); return 0; }
修复说明
- 输出时将
seconds强制转换为double类型,匹配%f格式符的使用要求;如果不需要小数输出,可直接使用%lld格式符输出long long类型的seconds变量 - 替换为正确的天转秒换算系数86400
- 调整输入校验逻辑到计算之前,避免无效计算
- 将
seconds类型改为long long,避免输入天数过大时int类型容量不足溢出 - 替换为C语言标准的
int main主函数写法
内容的提问来源于stack exchange,提问作者Min
相关产品推荐
相关产品推荐

