2016-10-04 3 views
-2
#include <stdio.h> 
#define F(x) 32 + (x*9)/5 

int main(void) 
{ 
    int F,C; 
    printf ("Enter temperature in celsius="); 
    scanf ("%d",&C); 
    F(C); 

    printf (" %d fahrenheit = %d celsius\n", F, C); 

    return 0; 
} 

Когда вход 10 цельсию, то выходит некоторые, как:Логическая ошибка - конвертировать FAH в градусы Цельсия

1798680630 fahrenheit = 10 celsius 

я пишу формулу неправильно? Я не могу понять ошибку. Просто начинающий, проходя мой учебник. Спасибо!

+0

Вы забыли добавить 'F =' перед 'F (C)', потому что вы хотите присвоить значение ваша переменная 'F'. http://ideone.com/Xc6c3x – mch

+1

[Запутайте людей?] (https://blog.codinghorror.com/coding-for-violent-psychopaths/) –

+0

Прежде всего, учитывая, что это ints, вы можете потерять слишком много информации при разделении. Во-вторых, вы не должны (не можете) иметь как переменную F, так и макрос F, она должна иметь ошибки. См. Ответы ниже о том, почему ваш код не работает – neoaggelos

ответ

0

Вы не сохраняете вывод F() переменной. Оно должно быть:

(...) 
    F = F(C); 

    printf (" %d fahrenheit = %d celsius\n", F, C); 

В настоящее время вы печатаете неинициализированную переменную которое неопределенное поведение и весьма опасно.

+0

спасибо! он работает сейчас. – belle

2

Вы не сохраняете результат расширения макросов вообще. Итак, F неинициализирован.

IMO, макрос не нужен вообще. Просто используйте переменную:

#include <stdio.h> 
int main(void) 
{ 
    int C; 
    float F; 
    printf ("Enter temperature in celsius="); 
    scanf ("%d",&C); 
    F = 32 + (C*9)/5.0; 
    printf (" %f fahrenheit = %d celsius\n", F, C); 

    return 0; 
} 

Обратите внимание, что я использовал буквальный 5.0 так, что вы не будете выполнять только целочисленное деление.

+0

спасибо! я изменил его на макрос, поскольку более простой он не дал мне правильный результат. плохо повторите попытку. – belle

0

Вы печатаете адрес F. Также не переносите переменные.

Удалить

F(C); 

Сделайте свою печать как: