Умножение переменных в C? - PullRequest
1 голос
/ 29 июня 2010
//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 выводит смешное число, в котором я не совсем уверен

Ответы [ 6 ]

7 голосов
/ 29 июня 2010
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 ине указательНа вашей платформе double*, вероятно, отличается от double, в результате чего последующие форматы printf используют неверные данные.

4 голосов
/ 29 июня 2010

Проблема в том, что у вас вывод printf float со спецификатором %f, но при передаче double* через &workПросто удалите & и все должно работать нормально.

printf("The dam would produce %f megawatts at %d%% efficency", work, EFINC2);
3 голосов
/ 29 июня 2010

Конечно.Амперсанд & в строке printf означает, что адрес переменной work читается вместо значения

3 голосов
/ 29 июня 2010

Причина, по которой вы получаете «смешное число», заключается в том, что вы передаете адрес от work до printf().Измените &work на work, и оно должно работать правильно.

1 голос
/ 29 июня 2010

Попробуйте добавить объявление к константам, чтобы c не приводило к int, может сработать.Вы также можете попробовать явно привести значения в плавающее или двойное число.

0 голосов
/ 29 июня 2010

вы дали & work, который является адресом рабочей переменной в памяти, поэтому он не печатает никаких абсурдных значений, он печатает место работы в памяти.

Вы должны удалить & из & work, чтобы получить значение рабочей переменной.

printf («Дамба будет производить% f мегаватт при% d %% эффективности», работа, EFINC2);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...