Problem bei der Switch Verzweigung



  • Gude ich hab ein Problem bei meiner switch case Verzweigung das erste case nimmt er an aber die restlichen sagt er die Fehlermeldung:
    Cannot jump from switch statement to this case label
    in der Zeile 45 und 52

    Das ist mein Code:

    #include <iostream>
    #include <string>
    using namespace std;
    
    //struct erstellt mit den Namen "Ware"
    struct adresse{
        int plz;
        string straße;
        int hausnummer;
    };
    
    struct produkt{
        string art;
        string getreanke_Art;
        int preis;
    };
    
    struct bestellung{
    
        produkt Produkt;
        adresse Adresse;
    };
    
    int main() {
    
        cout << "Willkommen bei bestellen: " << endl;
        cout << "Was wollen Sie bestellen ?" << endl;
        cout << "Menue: " << endl;
        cout << "Burger " << "Pommes " << "Getreank " << endl;
        cout << "Um den Burger zu weahlen druecken sie die taste klein b "<< endl;
        cout << "Um Pommes zu weahlen druecken Sie die taste klein p " << endl;
        cout << "Um trinken zu weahlen druecken Sie die taste klein t " << endl;
        char eingabe;
        cin >> eingabe;
    
        switch (eingabe){
    
            case'b':
                cout << "Welchen Burger wollen sie weahlen? " << endl;
                produkt burger;
                cin >> burger.art;
                cout << "Ihr Burger ist " << burger.art << " ist bestellt " << endl;
                break;
    
            case'p':
                cout << "Welche Pommes wollen Sie weahlen? " << endl;
                produkt pommes;
                cin >> pommes.art;
                cout << "Ihr Pommes: " << pommes.art << "ist bestellt " << endl;
                break;
    
            case't':
                cout << "Welches Getreank wollen Sie wollen? " << endl;
                produkt getreank;
                cin >> getreank.getreanke_Art;
                cout << "Ihr Getreank: " << getreank.getreanke_Art << "ist bestellt " << endl;
                break;
    }
        return 0;
    }
    
    


  • Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.
    Das hier sollte gehen (Ausschnitt):

    ...
    case 'b'
    {
       cout << "Welchen Burger wollen sie weahlen? " << endl;
       produkt burger;
       cin >> burger.art;
       cout << "Ihr Burger ist " << burger.art << " ist bestellt " << endl;
    }
    break;
    ...
    

    Du hast mehrfach "ea" für "ä", statt "ae".


  • Mod

    @adii950 sagte in Problem bei der Switch Verzweigung:

    struct adresse{
        int plz;
        string straße;
        int hausnummer;
    }
    

    Da freut sich Familie Meier, Kantstraße 22a, 01067 Dresden.



  • struct produkt{
        string art;
        string getreanke_Art;
        int preis;
    };
    

    @SeppJ sagte in Problem bei der Switch Verzweigung:

    Da freut sich Familie Meier, Kantstraße 22a, 01067 Dresden.

    Die würden sich eh nur ärgern, wenn sie "Standard"-Pommes bestellen und nen Burger kriegen.



  • @Jockelx sagte in Problem bei der Switch Verzweigung:

    Die würden sich eh nur ärgern, wenn sie "Standard"-Pommes bestellen und nen Burger kriegen.

    @adii950 schrieb

    cout << "Welches Getreank wollen Sie wollen? " << endl;

    Dafür können sie die gewollten Getränke wollen 😉


  • Mod

    @wob sagte in Problem bei der Switch Verzweigung:

    @Jockelx sagte in Problem bei der Switch Verzweigung:

    Die würden sich eh nur ärgern, wenn sie "Standard"-Pommes bestellen und nen Burger kriegen.

    @adii950 schrieb

    cout << "Welches Getreank wollen Sie wollen? " << endl;

    Dafür können sie die gewollten Getränke wollen 😉

    Die ungewollten bekommen sie ja zusätzlich auch noch.

    @adii950 : Was wir alle damit sagen wollen: Dein Code hat nicht nur bei der switch-Verzweigung Probleme, sondern die grundlegende Idee deines Datenmodells bedarf einer Überarbeitung. Du musst genauer überlegen, was wie zusammen gehört, was die Dinge bedeuten, und welche Werte sie haben können.



  • @SeppJ Achso okay danke dir verstehe du meinst ich sollte vor das Programmieren mir Gedanken machen wie man die Aufgabe ins Programmieren umsetzt oder? 😅🤔



  • @wob naja ich dachte mir es gibt ja verschiedene Pommes Größen (Portionen) z.B kleine Pommes, Mittel Pommes und XXL Pommes 😅😂



  • @DocShoe Achso okay verstehe ich das heißt das ich immer bei switch case diese blocks {......

    }

    machen soll zwischen den verschiedenen cases also so:

    char eingabe;
    
    switch(eingabe){
    
    case'h':{
    
    cout << "Hallo Wolrd " << endl;
    }
    
    break;
    
    unsw
    .
    .
    .
    .
    .
    }
    

  • Mod

    @adii950 sagte in Problem bei der Switch Verzweigung:

    @SeppJ Achso okay danke dir verstehe du meinst ich sollte vor das Programmieren mir Gedanken machen wie man die Aufgabe ins Programmieren umsetzt oder? 😅🤔

    Ja! Kommt dir das so komisch vor?

    In dem Sinne auch:

    @adii950 sagte in Problem bei der Switch Verzweigung:

    @wob naja ich dachte mir es gibt ja verschiedene Pommes Größen (Portionen) z.B kleine Pommes, Mittel Pommes und XXL Pommes 😅😂

    Das bildet dein Programm überhaupt nicht nach! Du machst quasi so etwas wie

    int sechs_komma_fuenf = 'g';
    


  • @DocShoe sagte in Problem bei der Switch Verzweigung:

    Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.

    [klugscheiss]
    Doch, klar darf man das. Darf nur danach kein weiteres Label mehr kommen 😃
    [/klugscheiss]



  • @adii950 sagte in Problem bei der Switch Verzweigung:

    @DocShoe Achso okay verstehe ich das heißt das ich immer bei switch case diese blocks {......
    }
    machen soll zwischen den verschiedenen cases

    Das verhindert zwar erstmal den Fehler, aber in der Regel ist es besser, die cases sehr kurz zu halten und dort einfach keine Variablen zu deklarieren. Wenn du in einem Case Variablen brauchst, mach eine Funktion daraus und rufe im Case nur deine Funktion auf (+ break).



  • @hustbaer sagte in Problem bei der Switch Verzweigung:

    @DocShoe sagte in Problem bei der Switch Verzweigung:

    Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.

    [klugscheiss]
    Doch, klar darf man das. Darf nur danach kein weiteres Label mehr kommen 😃
    [/klugscheiss]

    Interessant... wusste ich auch noch nicht.



  • @DocShoe sagte in Problem bei der Switch Verzweigung:

    Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.

    Die Variablen "leben" dann aber nur in dem Scope. Außerhalb sind sie unbekannt.



  • @DocShoe
    Für switch und case/default Labels gelten diesbezüglich die selben Regeln wie für goto und "normale" Labels: ein Sprung darf keine Initialisierung überspringen.

    Und wenn nach der Initialisierung keine weiteren case/default Labels mehr kommen, dann gibt es halt auch keinen Sprung der die Initialisierung überspringen könnte.

    Und da es um Initialisierung geht, ist auch das "überspringen" von Definitionen von nicht-initialisierten Variablen erlaubt. Also das ist z.B. erlaubt (wenn auch Sinnfrei):

    int foo(int n) {
        switch (n) {
        case 1:
            int i;
            return 42;
    
        default:
            i = 23;
            return i;
        }
    }
    

    Sobald du aber mit int i = 0; initialisierst, ist es nicht mehr erlaubt.

    switch ist sowieso ein lustiges Teil. Fall's du's noch nicht kennst, google mal "Duff's device".



  • @DirkB stimmt verstehe danke dir 😊


Anmelden zum Antworten