#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;