C语言程序出现Floating point exception,请求定位问题
引发浮点异常的原因分析
这段代码会在以下核心场景触发浮点异常(本质是整数除零错误):
1. 未初始化的计数变量导致潜在除零
代码中evenCount、oddCount、evenTotal、oddTotal都是局部整型变量,C语言中局部变量默认不会自动初始化为0,会保留内存中的随机垃圾值。如果程序运行时这些计数变量的初始垃圾值恰好为0,或者后续逻辑中计数未被累加(比如用户直接输入0终止程序),那么执行:
double evenAvg = evenTotal/evenCount; double oddAvg = oddTotal/oddCount;
时就会触发除零操作,引发浮点异常。
2. 输入数据导致某类数的计数为0
比如用户全程只输入偶数(最后输入0终止),那么oddCount会一直是初始垃圾值或0,计算oddAvg时会除以0;反之如果只输入奇数,evenCount为0,计算evenAvg时触发除零。
额外逻辑问题补充
- 循环条件
while(numReturn != 0)一开始就使用未初始化的numReturn,行为未定义,可能直接跳过循环进入平均值计算阶段,加剧除零风险。 - 输入0时,代码会进入
else if(numReturn%2 == 0)分支,错误地将0计入偶数总和和计数,不符合需求(0是终止符,不应被统计)。
内容的提问来源于stack exchange,提问作者PapaPumpkin
相关产品推荐
相关产品推荐

