c程序中的浮点异常

sam*_*rat -3 c

我在以下代码中有浮点异常.

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)

Owe*_*wen 6

尽管名称如此,但当您/%整数乘以时,实际上会发生"浮点异常" 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)

所以它可以作为分数值而不是整数发生.