2016-08-07 5 views
0

Das Programm läuft, aber ich kann nicht herausfinden, warum die Funktion innerhalb der dritten else if-Anweisung keinen genauen Wert zurückgibt. Danke für die Hilfe in
Fortschritt.Sonst, wenn Option 3 keine Antwort liefert ... was habe ich falsch gemacht?

finaltemp = newtemp(t, choice); 

printf("\nThe converted temperature is: %f", finaltemp); 

return(0); 
} 

double newtemp(double a, double b) 
{ 
double result; 
if (b==1) 
    { 
    result = (a-(273.15)); 
    } 
if (b==2) 
    { 
    result = (a+(273.15)); 
    } 
if (b==3) 
    { 
    result = (((5/9)*(a))-32); 
    } 
if (b==4) 
    { 
    result = (((9/5)*(a))+32); 
    } 
if (b==5) 
    { 
    result = (((9/5)*(a))-459.67); 
    } 
if (b==6) 
    { 
    result = ((a+459.67)*(9/5)); 
    } 

return(result); 
} 
+1

Wo ist "die dritte else if-Anweisung"? Ich sehe in deinem geposteten Code kein "sonst". – MikeCAT

+0

@MikeCAT Ich formatierte es nicht richtig in der Post, so dass der 'else' Teil der Anweisung abgeschnitten wurde. Wie auch immer, der Fehler, den ich gemacht habe, war die Verwendung von Int-Division anstelle von Gleitkomma-Division. Danke für die Antwort. –

Antwort

3

Sie führen Integer Division, nicht Gleitkomma Division.

Der Ausdruck (5/9) teilt zwei int Werte, so ist das Ergebnis ein int, insbesondere 0. Sie müssen Gleitkommakonstanten verwenden, um Gleitkomma Division zu erzwingen.

if (b==3) 
    { 
    result = (((5.0/9.0)*(a))-32); 
    } 
if (b==4) 
    { 
    result = (((9.0/5.0)*(a))+32); 
    } 
if (b==5) 
    { 
    result = (((9.0/5.0)*(a))-459.67); 
    } 
if (b==6) 
    { 
    result = ((a+459.67)*(9.0/5.0)); 
    } 
+0

Danke dafür. Mir wurde erst nach 30 Minuten klar, was ich falsch gemacht hatte. Solch eine dumme Aufsicht. Danke für die Erklärung! –

Verwandte Themen