Frage zu enumeration und switch case



  • Hallo,

    ich habe meinen Code der Form:

    bool a = true;
    bool b = false;
    bool c = false;
    
    infiniteLoop()
    {
       if(a)
       {
          doSomething();
          a = false;
          b = true;
          return;
       }
       if(b)
       {
          doSomethingElse();
          b = false;
          c = true;
          return;
       }
       if(c)
       {
          doSomethingDifferent();
          c = false;
          a = true;
          return;
       }
    }
    

    .. sinnvollerweise durch ein switch-case Konstrukt ersetzt:

    enumeration Enum {A, B, C};
    Enum abc = A;
    
    infiniteLoop()
    {
       switch(abc)
       {
          case A:
          {
             doSomething();
             abc = B;
             break;
          }
          case B:
          {
             doSomethingElse();
             abc = C;
             break;
          }
          case C:
          {
             doSomethingDifferent();
             abc = A;
             break;
          }
       }
    }
    

    Allerdings will das so nicht funktionieren. Irgendwie klappen die Zuweisungen innerhalb der cases nicht.
    Gibt es dafür eine sinnvolle Erklärung? Mit den if-Abfragen klappt alles und am eigentlichen Code habe ich beim switch-case sonst nichts verändert.

    Würde mich über eine Antwort freuen, ich zerbreche mir nämlich den Kopf und komme nicht weiter.



  • Beim ersten Code werden ja eigentlich alle if-Abfragen ausgefuehrt, da du die jeweiligen bool-Variablen immer auf true setzt ...

    Wenn du das in switch() machen willst musst du eigentlich nur die break Schluesselwoerter aus den cases rausnehmen...

    Uebrigens: Die geschweiften Klammern nach case sind eigentlich gar nicht notwendig... (allerdings auch kein Fehler)



  • Hi,

    durch das "return;" dürfte ja pro Schleifendurchlauf eigentlich immer nur ein Fall eintreten, oder habe ich was übersehen?
    Dass das ganze nacheinander durchlaufen würde ist sowieso nur ein unglücklicher Zufall, da ich meinen eigentlichen Code sehr stark abstrahiert habe, damit es übersichtlich bleibt.



  • metalhead schrieb:

    Hi,

    durch das "return;" dürfte ja pro Schleifendurchlauf eigentlich immer nur ein Fall eintreten, oder habe ich was übersehen?
    Dass das ganze nacheinander durchlaufen würde ist sowieso nur ein unglücklicher Zufall, da ich meinen eigentlichen Code sehr stark abstrahiert habe, damit es übersichtlich bleibt.

    Ups, das return hatte ich voellig uebersehen ... sorry

    normalerweise muesste dein Code passen. Kann jetzt eigentlich keinen Fehler entdecken.

    Was genau funktioniert denn nicht? Hab das gerade bei mir selbst getestet und funktioniert einwandfrei ...



  • Ich versteh es nicht.. auf einmal klappt es! 😃

    Ich habe zwar nichts (zumindest bewusst ;)) am Code geändert, aber es läuft.

    Aber danke für deine Bemühungen! 🙂


Anmelden zum Antworten