浮点异常(核心转储)

时间:2015-11-24 22:54:21

标签: c floating-point

我尝试使用puts(" ..")来查找错误的位置,但它没有帮助。

这是我的第三个功能,第一个和第二个功能正在发挥作用。 我翻译成englih,我希望这是可以理解的。

void write3(sth_st*E, int n, char* Typ){
    int i;
    int sum=0;
    int count=0;
    float result;

    for(i=0; i<n; i++){
        if(strcmp(Typ, E[i].typ)==0){
            sum=sum+E[i].time;
            count++;
        }
    }

    FILE*write3;
    write3=open("xD", "w");

    puts("rand");
    result=sum/count;
    fprintf(write3, "%f", result);

    return;
}

1 个答案:

答案 0 :(得分:2)

count很可能是整数和0。系统错误消息具有误导性,特别是因为除以0对浮点值完全有效。

使用额外的上下文,我们可以推断Typ数组中找不到E,或n可能count太小,sum和{{1} }都保留在0,而除法sum/count调用未定义的行为,因为它是一个整数除法。

如果您将其中一个转换为double,您将获得一个浮点除法,这无疑是您所期望的,printf将为此案例打印nan

result = (double)sum / count;

还有可能所有时间的总和可能溢出int类型。您应该sum一个double来避免这种情况。

请注意,%fprintf的{​​{1}}格式。 doubleresult,但幸运的是float在传递给float时会默默地转换为double。使用printf类型没有任何好处,请改用float