Почему мои выходные данные показывают экспоненциальные результаты, когда мой тип данных double?

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