2011-10-15 3 views
-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;  
}  
+1

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

ответ

6

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

average = sum/counter ; 

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

counter += counter; 

быть

counter += 1; 

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

average = (float)sum/counter ; 

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

+0

Да, я думаю, я сделал глупую ошибку. спасибо за указание. – samprat

1

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

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

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

int counter = 0;

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

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

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

counter + = 1;

Смежные вопросы