Почему мое уравнение возвращает число Int, а не число с плавающей запятой? (С, Dev-С++)

Я новичок в C и пытаюсь понять, почему мой код возвращает int в мою переменную с плавающей запятой pounds, а не ожидаемое число с плавающей запятой. При тестировании я могу заставить свой код возвращать только целые числа. Вот мой код, и я использую Dev-C++ v4.9.9.2 в соответствии с указаниями моего профессора.

#include <stdio.h>

#define WALK_CAL 5
#define STAND_CAL 2
#define DRINK_CAL 20
#define FOOD_CAL 40
#define CALS_PER_POUND 3500

main(){
   int minWalk;
   int minStand;
   int minDrink;
   int minEat;
   float pounds;

   printf("How many minutes were you walking? \n");
   scanf("%d", &minWalk);

   printf("How many minutes were you standing? \n");
   scanf("%d", &minStand);

   printf("How many minutes were you drinking? \n");
   scanf("%d", &minDrink);

   printf("How many minutes were you eating? \n");
   scanf("%d", &minEat);

   pounds = ((((minDrink*DRINK_CAL)+(minEat*FOOD_CAL))-((minWalk*WALK_CAL)+(minStand*STAND_CAL)))/CALS_PER_POUND)*-1;

   if(pounds >= 0){
      printf("You lost %.3f pounds today! \n", pounds);
   } else {
      printf("Weight lost is %.3f pounds. \n", pounds);
   }

   system("pause");

   return 0;
}

person Cameron Greene    schedule 07.09.2015    source источник
comment
это должно быть int main()   -  person Potato    schedule 07.09.2015


Ответы (3)


Поскольку minDrink, minEat, minWalk и minStand все равны int, уравнение возвращает целое число.

Вам также может понадобиться использовать #define как float, не уверен.

Объявите или приведите их как поплавки, и вы получите поплавок взамен.

person StephenG    schedule 07.09.2015

В: Почему мое уравнение возвращает число Int, а не число с плавающей запятой?

A: Потому что каждый операнд в вашем выражении выполняется в целочисленном пространстве.

ПРЕДЛОЖЕНИЕ: приведите свой divsor к «плавающему»:

pounds = (
  (
    ( (minDrink * DRINK_CAL) +  (minEat * FOOD_CAL) ) - 
    ( (minWalk * WALK_CAL) +  (minStand * STAND_CAL) ) 
  ) / (float)CALS_PER_POUND ) * -1 ;
person paulsm4    schedule 07.09.2015

По умолчанию C отбрасывает десятичную часть результата, когда операция имеет дело только с целыми числами.

Например:

float x;

x = 3/2;

Х будет равен 1, а не 1,5

person Lucas Piske    schedule 07.09.2015