#c #types
#c #типы
Вопрос:
Я пытаюсь найти среднее значение из 3 цифр: 3.5 9.6 10.2, которые являются числами с плавающей запятой.
Однако я не могу понять, почему мой вывод показывает такое странное число.
/* Computes pairwise averages of three numbers */
#include <stdio.h>
double average(double a , double b )
{
return (a b)/2 ;
}
int main (void)
{
double x, y,z;
printf("Enter three numbers: ");
scanf("%g%g%g", amp;x,amp;y,amp;z);
printf("Average of %g and %g : %gn", x,y,average(x,y));
printf("Average of %g and %g : %gn", y,z,average(y,z));
printf("Average of %g and %g : %gn", x,z,average(x,z));
return 0;
}
Комментарии:
1. Пожалуйста, посмотрите на предупреждения компилятора. строка формата ‘%g’ требует аргумента типа ‘float *’, но переменный аргумент 1 имеет тип ‘double *’. Примечание: рассмотрите возможность использования ‘% lg’ в строке формата.
2. Кроме того, пожалуйста, сделайте это обычным для проверки результатов
scanf()
, таких какif(scanf("%g%g%g", amp;x,amp;y,amp;z) != 3) { /* handle error */ }
Ответ №1:
Сэкономьте свое драгоценное время и включите все предупреждения компилятора для обнаружения этих простых ошибок.
%g
ожидает совпадения float *
.
%lg
ожидает совпадения double *
.
double x, y,z;
// scanf("%g%g%g", amp;x,amp;y,amp;z);
scanf("%lg%lg%lg", amp;x,amp;y,amp;z);
Лучший код также проверяет scanf()
возвращаемое значение
if (scanf("%lg%lg%lg", amp;x,amp;y,amp;z) == 3) Success();