C-Programm funzt nicht so wie ichs haben will



  • Hey Leute,

    ich habe eine C-Anwendung geschrieben, das zur Umrechnung der Währungen D-Mark und Euro dient. Hier der Quellcode:

    //---------------------------------------------------------------------------
    #include <stdio.h>
    #include <conio.h>
    #define Kurs 1,95583
    //---------------------------------------------------------------------------
    
    char c;
    double DM, Euro;
    int main()
    {
      printf("Please 'd' for <DM -> EURO>\n");
      printf("...or 'e' for <EURO -> DM>\n");
    
      c = getchar();
      switch (c)
      {
        case 'd':
          printf("Please type DM:");
          scanf("%lf", &DM);
          Euro = DM / Kurs;
          printf("%.2f DM sind %.2f Euro\n", DM, Euro);
          break;
        case 'e':
          printf("Please type Euro:");
          scanf("%lf", &Euro);
          DM = Euro * Kurs;
          printf("%.2f Euro sind %.2f DM\n", Euro, DM);
          break;
        default: printf("False input! :-)");
      }
      getch ();
      return 0;
    }
    //---------------------------------------------------------------------------
    

    Mein Problem besteht darin, dass es nicht so rechnet wie es EIGENTLICH sein sollte. Bsp.: Ich muss einen Wert in Euro angeben. Dann gibt mir das Programm den selben Wert in DM zurück. Das ist bei allen Größen so. Meine Vermutung ist, dass es an der Deklaration liegt. Helft mir bitte weiter 🙄



  • Der Dezimaltrenner in C(++) ist der Punkt, das Komma ist ein eingebauter Operator (Nacheinanderausführung von Ausdrücken). Und da der Präprozessor "dumm" ist, geht die unpassende Definition define Kurs 1,95583 problemlos durch den gesamten Compiler-Prozess - macht nur nicht das, was du erwartest (der Compiler sieht (z.B.) DM = Euro*1 , 95583; - multipliziere 'Euro' mit 1, weise das Ergebnis 'DM' zu und gib anschließend 95583 zurück (dieser Rückgabewert wird ignoriert)).

    Die Lösung lautet ganz einfach:

    #define Kurs 1.95583
    //oder besser
    const double Kurs = 1.95583;//wenn du dich hier vertippst, bemerkt das dein Compiler
    


  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielen Dank CStoll! 🙂 😉

    Die Eine als auch die Andere Variante funzen sauber.



  • CStoll schrieb:

    const double Kurs = 1.95583;//wenn du dich hier vertippst, bemerkt das dein Compiler
    

    eventuell nicht. komma ist ein akzeptabler operator.


Anmelden zum Antworten