2016-12-09 7 views
-2
#include <stdio.h> 

//function prototypes 
const double fiveNinths = 5/9; 

int toCelsius(double value) 
{ 
    return ((value - 32) * (fiveNinths)); 
} 

int toFarenheit(double value) 
{ 
    return (value * 1.8) + 32; 
} 


int main (void) 
{ 
    int intValue, menuSelect; 
    double results; 
    intValue = 1; 

    while (intValue > 0) 
    { 
     printf("enter a positive integer: \n"); 
     scanf("%d", &intValue); 

     if (intValue > 0) 
     { 
      printf("Enter 1 to convert to Farenheit, enter 2 to convert to Celsius: \n"); 
      scanf("%d", &menuSelect); 

      if (menuSelect == 1) 
      { 
       results = toFarenheit(intValue); 
       printf("%d degrees to Farenheit is %d\n", intValue, results); 
      } 
      else if (menuSelect == 2) 
      { 
       results = toCelsius(intValue); 
       printf("%d degrees to Celsius is %d\n", intValue, results); 

      } 
      else 
      { 
       printf("invalid menu item, please input only 1 or 2\n"); 
      } 
     } 
    } 

    return 0; 
} 

Я не могу понять, почему значение my toCelsius всегда возвращает 0. Функция toFarenheit работает нормально. Кроме того, эта программа заканчивается тем, что пользователь вводит отрицательное целочисленное значение; это часть домашнего задания, поэтому не обращайте внимания на эту часть.Моя функция возвращает 0 вместо фактического вычисленного возвращаемого значения?

+0

Прочтите, как обеспечить [mcve]. В вашем вопросе отсутствуют какие-либо значения ввода/вывода для поддержки вашего требования. – user694733

+0

Пожалуйста, правильно отформатируйте свой код. –

+2

Подсказка: что такое 5/9 в C? –

ответ

-1

В объявлении вашей функции он говорит int toCelsius(double value), но вы открываете функцию в своем главном results = toCelsius(intValue);. Операции вычисления затем используются с целым числом и 5/9 можно рассматривать как 0, что также всегда будет возвращать значение 0. Попытайтесь обменять 5/9 всего на 1, просто чтобы узнать, есть ли у вас разные значения, чем 0. Если это так, вы нашли ошибку.

+0

Это не Python, типы внутри функции не изменяются в зависимости от того, с чем вы это называете. – Quentin

+0

true @quentin вот где проблема возникает из-за того, что я упоминал в своем посте, если вы правильно ее покрасили. – Sham3r

+0

Вы подошли вплотную к ответу: '5/9' - целочисленное деление, потому что' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Но это никогда не будет иметь никакого отношения к типу аргумента, который вы передаете функции. – Quentin

0

Попробуйте с помощью:

const double fiveNinths = 5.0/9.0; 
double toCelsius(double value) { 
    return ((value - 32.0) * (fiveNinths)); 
} 

По этой линии: double results = toCelsius(double value), метод должен возвращать двойное значение, а не значение ineger.

Когда вы используете 9 или 5, вы фактически выполняете целочисленное деление, поэтому оно возвращает целочисленное значение 0, а не правое двойное значение.

Смежные вопросы