исключение с плавающей запятой в программе c

#c

#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= %ft %st" ,i , average , markup);   
        else     
            printf(" %d t  avg=%ft " ,i , average );     
}     
return 0;      
 }     
  

Комментарии:

1. Используйте отладчик и, по крайней мере, выясните, где это происходит.

Ответ №1:

Несмотря на название, «исключение с плавающей запятой» на самом деле происходит, когда вы / или % целое число by 0 . Я предполагаю, что это происходит здесь:

 average =  sum/counter ;
  

потому counter что все еще 0 . Я думаю, вы имели в виду

 counter  = counter;
  

чтобы быть

 counter  = 1;
  

Кроме того, вы можете захотеть изменить деление на

 average =  (float)sum/counter ;
  

таким образом, это может произойти как дробное значение, а не целое число.

Ответ №2:

Похоже, вы делите на ноль в следующей строке

среднее значение = сумма / счетчик ;

счетчик изначально определяется как ноль;

счетчик int = 0;

и обновлено здесь;

счетчик = счетчик; // счетчик остается нулевым….

вы имели в виду вместо этого обновить счетчик на единицу? например

счетчик = 1;