Почему я получаю "исключение с плавающей запятой (ядро сброшено)"?
Поэтому, когда я ввожу ввод положительных или положительных и отрицательных значений, код работает нормально, но просто ввод отрицательных значений приводит к ошибке с плавающей запятой, я знаю, что деление на ноль приведет к этому, но я погружаюсь на количество входов
#include <stdio.h>
int main()
{
int integer, pos, neg;
int poscounter, negcounter;
integer = 0;
pos = 0;
neg = 0;
poscounter = 0;
negcounter = 0;
do {
printf("Please enter an integer:");
scanf("%d", &integer);
if (integer > 0) {
pos += integer;
poscounter++;
}
else
neg += integer;
negcounter++;
} while (integer != 0);
printf("Positive average: = %d", pos / poscounter);
printf("Negative average: = %d", neg / negcounter);
}
Таким образом, результат ввода -3 -2 -1 0 должен привести к "Отрицательному среднему значению: -2"
3 ответа
if (integer > 0)
никогда не выполняется, так poscounter
никогда не увеличивается, поэтому, наконец, деление pos / poscounter
не может работать
#include <stdio.h>
int main()
{
int integer, pos, neg;
int poscounter, negcounter;
integer = 0;
pos = 0;
neg = 0;
poscounter = 0;
negcounter = 0;
do {
printf("Please enter an integer:");
scanf("%d", &integer);
if (integer > 0) {
pos += integer;
poscounter++;
}
else if(integer < 0) // Added else if for the logic as it was considering 0 as negative
{
neg += integer;
negcounter++;
}
} while (integer != 0);
printf("posc = %d\n", poscounter); // Printed for confirmation
printf("negc = %d\n", negcounter); // Printed for confirmation
/* Added these two ifs so that it can check any of the counters is not zero and it will not give (core dumped) */
if(poscounter)
printf("Positive average: = %d\n", pos / poscounter);
if(negcounter)
printf("Negative average: = %d\n", neg / negcounter);
return 0; // Adding this is a good practice
}
Привет, в логике была небольшая проблема: когда положительный / отрицательный не встречались, выражение делилось на 0. Более того, оно рассматривало 0 как отрицательное целое число. Пожалуйста, просмотрите комментарии, это может помочь
Это сбой при вводе -3,-2,-1,0, потому что если (целое число> 0) всегда ложно, то poscounter не будет увеличиваться в любое время, поэтому poscounter будет нулевым после цикла while.
printf ("Положительное среднее: = %d", pos / poscounter); вызовет сбой программы из-за операции, решенной нулем.
Лучше иметь проверку if для знаменателя и удостовериться, что он не равен нулю, прежде чем использовать его в делении:
if (0 != poscounter)
printf("Positive average: = %d", pos / poscounter);
Это обеспечит выполнение printf только в тех случаях, когда poscounter имеет ненулевое значение.