Problem in Code

OP #3249842
Hi,
ich wollte ein einfaches Getränkeautomatenprogramm machen.
Wenn nicht der Betrag eingegeben wird wie erwünscht soll kommen:
Bitte geben sie den passenden Betrag ein oder.
Das tut es auch. Aber wenn ich den richtigen Wert eingeben kommt das 
auch und wenn ich dann da nochmal den richtigen Wert eingeben dann erst 
ist das Programm erfolgreich:
1
.
2
.
3
.
4
if(wahl==3){
5
    printf("Bitte geben sie 1.50 Euro ein:");
6
    scanf("%f", &summe);
7
    do{
8
        printf("Bitte geben sie den vollen Betrag ein:");
9
        scanf("%f", &summe);
10
    }while(summe!=1.50);
11
        if(summe==1.50){
12
            printf("Bitte entnehmen Sie Ihr Getreank");
13
        }
14

15
}
16
.
17
.
18
.
Ich möchte wenn ich als erstes den Betrag richtig eingegeben habe gleich 
zum Ende.
Danke und Gruß?
Gast
Hallo Simon,
dann darfst du keine do-while Schleife benutzen. Diese wird nämlich erst 
einmal durchlaufen, bevor das Abbruchkriterium geprüft wird.
Ersetzt du sie durch eine While-Schleife, dann sollte dein Code laufen.
OP
Jetzt jetzt kommt nach jedem richtigen eingeben ich solle den passenden 
Preis eingeben:
1
if(wahl==2){
2
    printf("Bitte geben sie 2 Euro ein:");
3
    scanf("%d", &summe);
4
    while(summe!=2){
5
        printf("Bitte geben sie den vollen Betrag ein:");
6
        scanf("%d", &summe);
7
    }
8
        if(summe==2){
9
            printf("Bitte entnehmen Sie Ihr Getreank");
10
        }
11

12
}
Gast
Mit diesen kleinen "einfachen" Werten funktioniert das vermutlich noch, 
aber generell ist es eine schlechte Idee float's so zu benutzen, denn 
wenn man zwei floats summiert kommt nicht unbedingt die mathematisch 
Summe heraus, sondern z.B. etwas das um 0.00001 abweicht. Und wenn man 
dann auf exakt 1.5 prüft, wäre 1.4999999 schon falsch... Daher prüft 
man entweder einen Bereich ala 1.4<x<1.6, oder verwendet doch lieber 
Integer (und rechnet komplett in Cent), denn dort hat man dieses Problem 
nicht...
Gast
Simon Name schrieb:
> Aber was ist wenn ich jetzt Kommas haben möchte?
Einfach komplett in Cent rechnen (also ohne Komma) und dann einfach nur 
die Anzeige mit Komma machen:
1
printf ("%d,%d€\n", cents/100, cents%100);
Und die Eingabe auch:
1
int euros, cents;
2
scanf("%d,%d\n", &euros, &cents);
3
cents += euros * 100;
Und dann mit nur mit "cents" weiterrechnen.

So vermeidest du alle Probleme mit "float" komplett, vor allem eben die 
Ungenauigkeit in Peter II's Antwort. float sollte grundsätzlich nur 
benutzt werden wenn man ganz genau weiß wie das funktioniert und wie die 
Probleme entstehen... Integer funktionieren hier ja wunderbar da man 
alles in Cents rechnen kann, das Komma ist nur eine Frage der 
Ein/Ausgabe.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.