我尝试使用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;
}
答案 0 :(得分:2)
count
很可能是整数和0
。系统错误消息具有误导性,特别是因为除以0
对浮点值完全有效。
使用额外的上下文,我们可以推断Typ
数组中找不到E
,或n
可能count
太小,sum
和{{1} }都保留在0
,而除法sum/count
调用未定义的行为,因为它是一个整数除法。
如果您将其中一个转换为double
,您将获得一个浮点除法,这无疑是您所期望的,printf
将为此案例打印nan
。
result = (double)sum / count;
还有可能所有时间的总和可能溢出int
类型。您应该sum
一个double
来避免这种情况。
请注意,%f
是printf
的{{1}}格式。 double
是result
,但幸运的是float
在传递给float
时会默默地转换为double
。使用printf
类型没有任何好处,请改用float
。