Переменное умножение в C?
-
01-10-2019 - |
Вопрос
//Hydroelectric Dam Helper
#include <stdio.h>
#define GRAV 9.80
#define EFINC 0.9
#define EFINC2 90
int main()
{
//Defines all the variables to be used
double height, work, mass;
printf("Height of dam (in meters):");
scanf("%lf", &height);
printf("Flow of water (in thousand cubic meters per second):");
scanf("%lf", &mass);
work = (mass * GRAV * height * EFINC);
printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);
return 0;
}
Значения устанавливаются правильно, я проверил его, имея его печатать высоту и массу, но работа никогда не получает значение, и EFINC2 отпечатывает смешное число, которое я не совсем уверен в
Решение
printf("The dam would produce %f megawatts at %d%% efficency", &work, EFINC2);
должен прочесть:
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
&work
это указатель на работу, то есть double*
но для printf
Чтобы распечатать значение, которое вам нужно пройти double
И не указатель. На вашей платформе A double*
вероятно, другой размер double
вызывая последующую printf
форматы для использования неправильных данных.
Другие советы
Проблема в том, что вы напечатаете вывод float
с %f
спецификатор, но прохождение в double*
через &work
. Отказ Просто удалите &
И это должно работать нормально.
printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
Причина, по которой вы получаете «смешное число», это то, что вы передаете адрес work
к printf()
. Отказ Изменять &work
к work
И это должно работать должным образом.
Конечно. Амперсанд &
в PrintF-line означает, что адрес из переменной work
читается вместо стоимость
Попробуйте добавить рекламу константам, чтобы заставить C, чтобы не отказаться от INT, может работать. Вы также можете попробовать явно отличить значения либо поплавкам или двойным.
Вы дали и работают, что является адресом работы вариабельной переменной в памяти, поэтому она не печатает никакого абсурдного значения, он печатает местоположение памяти работы.
Вы должны удалить и работать, чтобы получить значение варианта работы.
Printf («плотина будет производить% F megawatts при% d %% Effication», работа, EFINC2);