[C]Warum erzeuge ich eine Entlosschleife?

papsti7

Lt. Junior Grade
Registriert
Feb. 2014
Beiträge
304
Hier der quelltext. Das Beispiel ist aus "C für Dummies" Beispiel lobby3.c.
Code:
#include<stdio.h>
#include<ctype.h>



int main()
{
    char ch;
    float gesamt;
    int fertig;
    printf("Was sollen sie haben?\n");
    printf("Wählen sie aus!\n");
    printf("G für Getraenk!\n");
    printf("s für Suessigkeiten!\n");
    printf("H für Hotdog!\n");
    printf("P für Popcorn!\n");
    printf("= für Kassa!\n");
    printf("Ihre Auswahl:");
    fertig=0;
    ch=toupper(getchar());
    gesamt=0;
    while(!fertig)
    {
       switch(ch)
    {
    case'G':
        printf("Getränk kostet 3 EUR.\n");
        gesamt +=3.0f;

        break;
       case'S':
        printf("Suessigkeit kostet 2,5 EUR.\n");
        gesamt +=2.5f;

        break;
        case'H':
        printf("HOTDOG kostet 3 EUR.\n");
        gesamt +=3.0f;

        break;
        case'P':
        printf("Popcorn kostet 3,5 EUR.\n");
        gesamt +=3.5f;

        break;
        case'=':
        printf("Kassa!.\n");
        printf("Alles zusammen macht:%.2f.\n",gesamt);
        fertig=1;
        break;

    }
    }



    return 0;
}
Und zwar wenn ich das programm starte und eine auswahl betätige kommt immer die ausgabe (zb. G Getränk kostet 3 eur) und das so lange bis ich mit strg c abbreche. Ganz verstehe ich das nicht vor allem weil ich das beispiel schon fast 1 zu 1 abgeschrieben habe.
 
ch=toupper(getchar());
Gehört in die whileschleife, sonst kannst du ja nur 1mal auswählen.

evtl. mal fertig als bool variable deklarieren
0 = false
Alles sonst = true
 
Zuletzt bearbeitet:
Soweit ich das sehe rufst du nur einmal getchar() auf, und das in Zeile 20.
mMn gehört die Zeile direkt vor den switch-case, damit du immer eine neue Eingabe verarbeiten kannst?
 
mit "break" springst du aus dem case raus. "fertig" setzt du aber nur im '=' case., bei allen anderen bleibst du immer in der while Schleife.
 
habe das ch=... mal in zeile 23 gegeben und nun funktioniert alles :) danke freue mich jetzt und kann motiviert weiterarbeiten!
 
Zurück
Oben