我在以下代码中有浮点异常.
int heavy_decimal_count ( int A, int B )
{
char * markup = "Heavy";
int i , value;
int tempA = A;
int tempB = B;
int reminder = 0;
int sum = 0;
float average = 0.00;
int counter = 0;
if( (tempA < 0) || ( tempB <0 )||( B < A ) )
{
printf(" Error -> Numbers are negative or B is less than A");
return 0;
}
for ( i = A ; i <= B ; i++)
{
value = i;
while( value > 0 )
{
printf(" the value is %d ", value );
counter += counter;
reminder = value % 10;
value /= 10;
sum += reminder;
average = sum/counter ;
}
if( average > 7.0 )
printf(" %d \t avg= %f\t %s\t" ,i , average , markup);
else
printf(" %d \t avg=%f\t " ,i , average );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尽管名称如此,但当您/或%整数乘以时,实际上会发生"浮点异常" 0.我的猜测是它发生在这里:
average = sum/counter ;
Run Code Online (Sandbox Code Playgroud)
因为counter还在0.我想你的意思
counter += counter;
Run Code Online (Sandbox Code Playgroud)
成为
counter += 1;
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望将分区更改为
average = (float)sum/counter ;
Run Code Online (Sandbox Code Playgroud)
所以它可以作为分数值而不是整数发生.