Warum kommen bei meinem Programm immer komische Zahlen raus?



  • Ich bekomm immer mysteriöse Zahlen ausgegeben, warum? 😡

    #include <conio.h>
    #include <stdio.h>
    
    void main (void)
    {
     int betrag, one_cent, two_cent, ten_cent, twenty_cent, fifty_cent;
    
     gotoxy(15,3);
     printf("Geben sie einen Betrag unter 1 Euro in ct. an : ");
     scanf("%i",&betrag);
    
     if (betrag >= 50)
     {
      ++fifty_cent ;
      betrag = betrag - 50;
     }
     if (betrag >= 20)
     {
      ++twenty_cent ;
      betrag = betrag - 20;
     }
     if (betrag >= 10)
     {
      ++ ten_cent;
      betrag = betrag - 10;
     }
     if (betrag >= 2)
     {
      ++two_cent ;
      betrag = betrag - 2;
     }
     if (betrag > 0)
     {
      ++one_cent ;
      betrag = betrag -1;
     }
     gotoxy(20,5);
     printf("Du brauchst : %i 50ct. Stueck,",fifty_cent);
     gotoxy(34,6);
     printf("%i 20ct. Stuecke,",twenty_cent);
     gotoxy(34,7);
     printf("%i 10ct. Stuecke,",ten_cent);
     gotoxy(34,8);
     printf("%i 2ct.  Stuecke,",two_cent);
     gotoxy(34,9);
     printf("%i 1ct.  Stuecke.",one_cent);
     gotoxy(34,10);
     getch();
    }
    

    Danke, mfG,
    Anfänger01



  • Ich bekomm immer mysteriöse Zahlen ausgegeben, warum?

    Weil du vergessen hast die Variablen zu initialisieren:

    int one_cent=0; 
    // ...
    

    Dann:

    betrag = betrag - 50;
    

    kannst du durch

    betrag -= 50;
    

    ersetzen.

    Und dann überleg dir die Logik mal mit dem beispiel 40 Cent. (50: Nö, 20: Ja, 10: ja, 5: Ja, 2: Ja, 1:ja; 20+10+5+2+1 = 38 und 38!=40 !!!).



  • Ok, ich hab das ganze mit einer while Schleife gelösst.
    Danke! 👍

    #include <conio.h>
    #include <stdio.h>
    
    void main (void)
    {
     int betrag, one_cent, two_cent, ten_cent, twenty_cent, fifty_cent;
    
     one_cent = 0;
     two_cent = 0;
     ten_cent = 0;
     twenty_cent = 0;
     fifty_cent = 0;
    
     gotoxy(15,3);
     printf("Geben sie einen Betrag unter 1 Euro in ct. an : ");
     scanf("%i",&betrag);
    do
    {
     if (betrag >= 50)
     {
      ++ fifty_cent ;
      betrag -= betrag 50;
     }
     if (betrag >= 20)
     {
      ++ twenty_cent ;
      betrag -= 20;
     }
     if (betrag >= 10)
     {
      ++ ten_cent;
      betrag -= 10;
     }
     if (betrag >= 2)
     {
      ++ two_cent ;
      betrag -= 2;
     }
     if (betrag > 0)
     {
      ++ one_cent ;
      betrag -= 1;
     }
    }
     while (betrag > 0);
     gotoxy(20,5);
     printf("Du brauchst : %i 50ct. Stueck,",fifty_cent);
     gotoxy(34,6);
     printf("%i 20ct. Stuecke,",twenty_cent);
     gotoxy(34,7);
     printf("%i 10ct. Stuecke,",ten_cent);
     gotoxy(34,8);
     printf("%i 2ct.  Stuecke,",two_cent);
     gotoxy(34,9);
     printf("%i 1ct.  Stuecke.",one_cent);
     gotoxy(34,10);
     gotoxy(12,24);
     printf("Beliebige Taste druecken um zu Windows zurueckzukehren ...");
     getch();
    }
    


  • Die folgende Zeile ist noch etwas seltsam:

    betrag -= betrag 50;
    

    und Jetzt kommst du zwar auf 40 Cent, aber nicht 20+20, sondern 20+10+5+2+1+2. Vielleicht ist das ja aber auch korrekt so.



  • Meiner Ansicht nach gehören alle if durch while ersetzt. Nämlich immer so lange das größte Geldstück was noch paßt dazunehmen...

    MfG Jester



  • Jester schrieb:

    Meiner Ansicht nach gehören alle if durch while ersetzt. Nämlich immer so lange das größte Geldstück was noch paßt dazunehmen...

    Meiner ansicht nach auch, bei 10, 5 und 1 muss es keine schleife sein. die äusere schleife kann man sich dann natürlich sparen.

    ansonsten rechne das ganze mal mit 39 (20+10+5+2+1+1)

    mfg


Anmelden zum Antworten