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

C语言程序异常:5/9第5行打印1.799999而非预期0.000000

问题原因分析

首先明确核心问题:你的代码触发了C语言的未定义行为,根源是printf的格式符和传入参数的类型不匹配。

关键细节拆解

  • 5/9是整数除法:因为两个操作数都是int类型,整数除法会直接截断小数部分,结果是0(int类型)。
  • 第一个printf("%f\n",5/9)输出0.000000:%f格式符要求传入double类型参数,但你传了int类型的0。在当前环境的函数调用栈布局下,这个int类型的0刚好被解析成了浮点型的0.0,这是巧合。
  • 第三个printf("%f\n",5/9)输出1.799999:第二个printf传入的是double类型的1.8(9.0/5.0的结果是double),调用结束后栈上残留了这个浮点值的部分数据。第三个printf依然用%f读取栈,但你传的int类型0并没有覆盖掉之前的残留数据,导致它错误解析出了接近1.8的数值——这就是未定义行为的典型表现:结果完全不可控,换个环境可能输出其他奇怪的值。

正确写法

要输出5/9的浮点结果,需要把操作数转为浮点类型,让除法变成浮点除法:

#include<stdio.h>
int main(){
   printf("%f\n", 5.0/9);  // 用浮点操作数,结果是double,匹配%f
   printf("%f\n", 9.0/5.0);
   printf("%f\n", (double)5/9);  // 强制类型转换,同样得到浮点结果
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:22:06