James
James

Reputation: 89

C program to convert Fahrenheit to Celsius always prints zero

I need some help with a program for converting Fahrenheit to Celsius in C. My code looks like this

#include <stdio.h>
int main(void)
{
    int fahrenheit;
    double celsius;

    printf("Enter the temperature in degrees fahrenheit:\n\n\n\n");
    scanf("%d", &fahrenheit);
    celsius = (5 / 9) * (fahrenheit - 32);
    printf("The converted temperature is %lf\n", celsius);

    return 0;
}

Every time I execute it it the result is 0.000000. I know I'm missing something but can't figure out what.

Upvotes: 7

Views: 90309

Answers (6)

TheBuzzSaw
TheBuzzSaw

Reputation: 8826

When dealing with floats, it needs to be 5.0f / 9.0f.

When dealing with doubles, it needs to be 5.0 / 9.0.

When dealing with integers, remainders/fractions are always truncated. 5 / 9 results between 0 and 1, so it is truncated to just 0 every time. That multiplies the other side by zero and completely nullifies your answer every time.

Upvotes: 0

Incognito
Incognito

Reputation: 16577

You problem is here :

celsius = (5/9) * (fahrenheit-32);

5/9 will always give you 0. Use (5.0/9.0) instead.

Upvotes: 9

Vladimir Ivanov
Vladimir Ivanov

Reputation: 43098

try celsius = ((double)5/9) * (fahrenheit-32); Or you can use 5.0.

The fact is that "/" looks at the operand type. In case of int the result is also an int, so you have 0. When 5 is treated as double, then the division will be executed correctly.

Upvotes: 2

Jonathan Wood
Jonathan Wood

Reputation: 67203

You need to use floating point arithmetic in order to perform these type of formulas with any accuracy. You can always convert the final result back to an integer, if needed.

Upvotes: 0

Foo Bah
Foo Bah

Reputation: 26271

write 5/9.0 instead of 5/9 -- this forces double division

Upvotes: 0

nybbler
nybbler

Reputation: 4841

5/9 will result in integer division, which will = 0

Try 5.0/9.0 instead.

Upvotes: 25

Related Questions