2016-10-04 80 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攝氏度,談到了一些爲:邏輯錯誤 - 轉換華氏攝氏度到

1798680630 fahrenheit = 10 celsius 

難道我錯寫公式?我似乎無法弄清楚這個錯誤。 只是一個初學者,通過我的教程。謝謝!

+0

你忘了添加一個'F ='在'F(C)',因爲要分配值前你的變量'F'。 http://ideone.com/Xc6c3x – mch

+1

[爲什麼讓人們困惑?](https://blog.codinghorror.com/coding-for-violent-psychopaths/) –

+0

首先,鑑於這些是整數,你可能會失去分割時太多的信息。其次,你不應該(不能)有一個變量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); 

做你的印刷,如: