提问人:PapaPumpkin 提问时间:10/9/2023 最后编辑:Eric PostpischilPapaPumpkin 更新时间:10/9/2023 访问量:57
浮点异常(核心转储)需要帮助确定潜在错误的位置
Floating point exception (core dumped) need help identifying where potential error is
问:
此函数应打印从 while 循环给出的奇数和偶数输入的平均值,直到输入 0,然后结束。它目前无法运行,我将此块从与错误无关的较大代码段中分离出来。有什么想法会在哪里给出点异常错误吗?
int main()
{
int numReturn;
int evenTotal;
int evenCount;
int oddTotal;
int oddCount;
while(numReturn != 0){
printf("Enter a positive integer: ");
scanf("%d",&numReturn);
if(numReturn<0){
printf("That's a negative number!\n");
}else if(numReturn%2 == 0){
evenTotal += numReturn;
evenCount += 1;
}else{
oddTotal += numReturn;
oddCount += 1;
}
}
double evenAvg = evenTotal/evenCount;
double oddAvg = oddTotal/oddCount;
printf("%d even numbers were entered and the average is %lf\n",evenCount,evenAvg);
printf("%d odd numbers were entered and the average is %lf\n",oddCount,oddAvg);
//some code for problem 1
return 0;
}
答:
2赞
Eric Postpischil
10/9/2023
#1
默认情况下,具有自动存储持续时间的变量(在没有或其他存储说明符的函数中定义)不会初始化。当使用这样的变量时,它没有确定的值(如果变量可以用 声明,则程序具有未定义的行为,这意味着它的地址没有被采用)。static
register
当 或的值为零时,或 中出现除以零的情况。很可能,这些都是整数变量,除以零会导致异常。由于历史原因,这被报告为“浮点异常”。evenCount
oddCount
evenTotal/evenCount
oddTotal/oddCount
要解决此问题,您应该首先初始化局部变量:
int numReturn = 0;
int evenTotal = 0;
int evenCount = 0;
int oddTotal = 0;
int oddCount = 0;
此外:
- 您应该在程序中设置 when 或 is zero,因为用户没有输入任何偶数或没有输入任何奇数。在这些情况下,没有定义平均值。
evenCount
oddCount
- 计算平均值时,应在执行除法之前转换为浮点数。 将使用整数算术进行计算。将其更改为将使用算术。
double evenAvg = evenTotal/evenCount;
evenTotal/evenCount
double evenAvg = (double) evenTotal / evenCount;
double
下一个:基于空间设置更新多边形内点的属性
评论
oddCount =+ 1;
看起来像错别字double evenAvg = evenTotal/evenCount;
应该是double evenAvg = evenCount > 0 ? ((double)evenTotal/evenCount) : 0;