int num1, num2;
double average;
average=(double)(num1+num2)/2;
printf("average: %d", average);
Мой тестовый printf показывает среднее значение как: 0
Это может быть слишком просто, но я этого не вижу. Мои входные данные - "int", а среднее - "double", но почему-то это не вычисляется, верно?
Если вам нравятся полученные ответы, вы должны проголосовать за них и принять один как лучший ответ. Часто задаваемые вопросы
Совет по повышению эффективности: включите все предупреждения компилятора. Конечно, должно было появиться предупреждение о printf("average: %d", average);. Быстрее, чем размещать на SO.
Я понимаю теперь. Я сделаю, спасибо.





Вы используете неправильный описатель формата для printf.
Спецификатор формата %d ожидает аргумент int, но вы передаете double. Использование неправильного спецификатора формата вызывает неопределенное поведение.
Чтобы напечатать double, используйте %f.
printf("average: %f\n", average);
@ZulfidinKhodzhaev Рад, что смог помочь. Не стесняйтесь прими этот ответ, если вы нашли это полезным.
Нет необходимости изменять оператор average=(double)(num1+num2)/2;, чтобы получить ожидаемый результат внутри printf, используйте %f вместо %d
(num1+num2), результат этого типа integral. скажем 15. Затем, когда вы выполняете (double)15/2, результат будет типа floating, то есть 7.500000.average = (double)7.500000 в среднем содержит 7.500000, но, поскольку вы напечатали в %d, вы получаете 0 как его неопределенное поведение. вместо этого используйте %fВот рабочий
int main() {
int num1 = 7, num2 = 8;
double average;
average = (double)(num1 + num2)/2;
printf("average: %f\n", average);
return 0;
}
Большое спасибо
int num1, num2;
double average;
average=(num1+num2)/2.; // Using a decimal point forces 2 to be a double.
printf("average: %f\n", average); // Use the correct specifier for double: %f
Большое спасибо
Вы должны использовать printf ("average =% f", avearge); вместо использования "% d" для вывода среднего значения. Я думаю, это решит ваши проблемы ...
Целочисленное деление дает целочисленный результат: 1/2 == 0, 5/3 == 1 и т. д. Если вы хотите получить результат с плавающей запятой, по крайней мере, один из операндов должен быть типом с плавающей запятой: 1/2.0f == 0.5f, 5/3.0 == 1.6667 и т. д.
Итак, вам нужно разделить свою сумму на 2.0, а не на 2:
average = (num1 + num2)/2.0;
Во-вторых, вам нужно использовать спецификатор формата %f для вывода с плавающей запятой:
printf( "average: %f\n", average );
Спасибо, вы показали другой способ решения моей проблемы :)
Кратчайший путь:
average=(num1+num2)/2.;