Frage zur Typumwandlung



  • Hallo!

    Ich möchte ein Programm zur Umrechnung (Grad Fahrenheit in Grad Celsius) schreiben. Als Ergebnis für Celsius erhalte ich aber immer 0.0000.

    Was mache ich hier falsch?

    void main(void)
    {
    	int fahrenheit = 0;
    	float celsius;
    
    	while (fahrenheit < 10)
    	{
    		celsius = float((5/9)*(fahrenheit-32));
    
    		printf("%i Fahrenheit = %f Celsius\n",fahrenheit, celsius);
    		fahrenheit ++;
    	}
    	getchar();
    }
    


  • 5/9 ist eine Ganzzahlendivision und somit 0. Schreibe stattdessen 5.0/9.



  • Hallo,

    eine richtige Antwort gab es schon, aber da Du ja etwas über Typumwandlung wissen wolltest, hier gibt es die satt (als Beispiel):

    #include <stdio.h>
    
    void main(void)
    {
      int fahrenheit = 0;
      float celsius;
    
      while (fahrenheit < 10)
      {
        celsius = (((float)5/(float)9)*(float)(fahrenheit-32));
    
        printf("%i Fahrenheit = %.2f Celsius\n",fahrenheit, celsius);
        fahrenheit ++;
      }
      //getchar();
    }
    

    Und so kann man die Ausgabe auch sauber formatieren, wenn die Zahlen größer werden:

    #include <stdio.h>
    
    void main(void)
    {
      int fahrenheit;
      float celsius;
    
      for (fahrenheit = 0; fahrenheit <= 100; fahrenheit += 5)
      {
        celsius = (((float)5/(float)9)*(float)(fahrenheit-32));
        printf("%3i Fahrenheit = %6.2f Celsius\n",fahrenheit, celsius);
      }
      //getchar();
    }
    

    Gruß



  • Wieso all diese überflüssigen Casts? Soll das ein Witz sein?



  • _matze schrieb:

    Wieso all diese überflüssigen Casts? Soll das ein Witz sein?

    Er wollte ein Beispiel für Typumwandlungen haben, nicht mit nimm 5.0 statt 5 abgefertigt werden. Nach Deiner Antwort war der Threadstarter praktisch genau so schlau wie vorher.

    Im übrigen, stammt das Beispielsprogrämmchen nicht von mir.



  • CrashX schrieb:

    Er wollte ein Beispiel für Typumwandlungen haben, nicht mit nimm 5.0 statt 5 abgefertigt werden.

    Quatsch. Lies lieber noch mal genau nach. Er wollte wissen, was er falsch macht. Von einem Beispiel für Typumwandlung hat hier keiner außer dir gesprochen.

    CrashX schrieb:

    Nach Deiner Antwort war der Threadstarter praktisch genau so schlau wie vorher.

    Nach meiner Antwort wusste er, was sein Fehler war.

    CrashX schrieb:

    Im übrigen, stammt das Beispielsprogrämmchen nicht von mir.

    Der von dir gepostete, angepasste Code und vor allem die überall darin verstreuten, überflüssigen Casts sind nicht von dir? Aha. 😃



  • 5.0 ist übrigens double, nicht float. float wäre 5.f. Und ein cast hätte völlig gereicht (auch wenn 5.0/5.f natürlich besser sind). Weiter heißt es int main(void), nicht void main(void).



  • cooky451 schrieb:

    5.0 ist übrigens double, nicht float.

    Natürlich, aber double schadet ja nicht. 😉 Überhaupt würde ich hier eher überall double verwenden.


Log in to reply