switch case



  • Hallo,
    ich habe einen switch() ... case().... bereiche.
    Es gibt 7 Fälle, Aufsteigend geordnet.
    also
    case(0)
    case(1)
    .
    .
    .
    Jetzt ist es aber so, dass ich gerne von Fall(1) zu Fall(7) springen würde,
    ohne die Ordnung um zu stellen. Macht man das, und wenn ja, wie macht man das ??
    Also wie springt man generell zwischen den cases hin und her??
    Gruß



  • Ich verstehe dich nicht so ganz. Möchtest Du, dass alle "case" auf einmal ausgeführt werden? Dann lass einfach das "break" weg.

    Sonst wird nur das case ausgeführt, dass durch den WErt der switch Variable festgesetzt wird.

    lg, freakC++



  • Wenn dein Quelltext nur wenige Zeilen umfasst, schreib ihn hier rein.

    Oder schon mal ein paar Stichworte:
    break <- ist in ausreichender Anzahl in deinem Quelltext vorhanden?
    Schleifen sind dir schon klar was man damit bewirken kann?

    MfG f.-th.



  • Hi,
    Nein es geht darum, dass ich z.B.

    switch(wert)
    {
    
    case(1):
    //mache das was du unter case 1 machen sollst
    //goto(case(3)) -> springe zu case(3) 
    //Das soll funktionieren ohne case(2) und case(3) oder case(1) und case(2)
    //in der Reihenfolge zu vertauschen
    break;
    case(2):
    break;
    case(3)
    //mache case(3). Ist ein Teilstück von case(1)
    break;
    
    }
    

    Ich habe es mit einem goto nicht probiert, wber mit einem switch(3). Das geht aber nicht.
    Gruß



  • Lass die Finger von goto. Weise doch einfach der switch Variable im jewiligen case den gewünschten Wert zu....

    Warum sollten case Anweisungen vertauscht werden. Das passiert doch nie oder verstehe ich dich da falsch?

    lg, freakC++



  • Na ja ich will ja wenn wert==1 -> true
    Nach case(1) springen, und bei ende case(1) nicht ausseigen, sondern bei case(3) weiter machen.
    Wie schon gesagt funktioniert ein switch(3) nicht innerhalb von switch case, was ich mir schon gedacht habe. Ein goto müßte dort aber gehen.
    gruß



  • Also ein goto funktioniert.
    Wenn keiner eine bessere Lösung hat, werde ich es so machen.

    switch(wert)
    {
    
    case(1)://mache case(1)
           //gehe zu case3
           goto CASE3;
    
    case(2):
           break;
    CASE3:
    case(3)://mache case3
           break;
    }
    

    Gruß



  • So vielleicht?

    bool nochWasZuErledigen = false;
    
    do {
        switch(wert) {
            case 1:
                machWas();
                wert = 3;
                nochWasZuErledigen = true;
                break;
            case 2:
                machWasAnderes();
                nochWasZuErledigen = false;
                break;
            case 3:
                machNochMehr();
                nochWasZuErledigen = false;
                break;
            default:
                nochWasZuErledigen = false;
                break;
        }
    }while(nochWasZuErledigen);
    


  • Lach 🙂
    Das ist auch ne Lösung, aber ich finde meine in dem Fall besser, obwohls ein goto ist.
    Gruß



  • Entweder doch die Reihenfolge ändern (warum willst du das nicht?) oder den Code von case 3 in eine Funktion packen, die dann sowohl in case 1 als auch in case 3 aufgerufen wird.



  • Klar funktioniert goto. Aber es gibt viel bessere Lösungen wie das von Mizar!

    lg, freakC++



  • Laß Dich nicht veralbern. Goto ist hier bisher die beste Lösung.



  • Also die Reihenfolge will ich nicht ändern, weils
    eine Sache sit, die übersichtlich sein soll.
    Und die Numerrierung ist hier wichtig.
    Ich verwende normalerweise nie goto. Aber in diesem Fall würde ich es verwenden.
    Es spricht nichts dagegen soweit ich das sehe. Und um Goto garnicht zu verwenden bin ich zu wenig Rasist =).
    Den Funktionsaufruf würde ich mir auch gerne sparen.
    Für inline ist das was iche zu groß.
    Speziell würde mich hier interessieren was in diesem Fall gegen das goto spricht.
    Mich würde interessieren, ob der compiler draus kommen kann.
    Aber soweit ich das sehe, ist das hier nicht der fall.

    Ich finde es an dieser Stelle:

    a)übersichtlich
    b)stabiel
    und damit zweckdienlich.
    Gruß



  • 🙂
    Danke Volkard,
    Eine zweite kompetente Meinung außer meiner genügt mir an der Stelle *ggg*
    Dann werde ich es so machen.
    Gruß



  • Ich hätte auch am ehesten die Reihenfolge geändert, aber das schliesst du ja aus (so auch den Funktionsaufruf), dann spricht eigentlich nichts gegen ein goto.

    Gegen goto spricht im allgemeinen der unüberlegte Einsatz. Grundsätzlich sollten die Alarmglocken klingeln, wenn du ein goto machen willst, wenn du dir aber die Alternativen überlegst und die ausschliessen kannst, dann ist goto kein Problem.



  • Mizar schrieb:

    So vielleicht?

    bool nochWasZuErledigen = false;
    
    do {
        switch(wert) {
            case 1:
                machWas();
                wert = 3;
                nochWasZuErledigen = true;
                break;
            case 2:
                machWasAnderes();
                nochWasZuErledigen = false;
                break;
            case 3:
                machNochMehr();
                nochWasZuErledigen = false;
                break;
            default:
                nochWasZuErledigen = false;
                break;
        }
    }while(nochWasZuErledigen);
    

    Wenn der fraglich Code sich so aufspalten lässt, wie du das hier gemacht hast, dann wäre folgendes doch viel sinnvoller:

    switch(wert) {
            case 1:
                machWas();
                break;
            case 2:
                machWasAnderes();
                break;
            case 3:
                machWas(); // TADAA!
                machNochMehr();
                break;
        }
    


  • Registrierter Troll schrieb:

    Wenn der fraglich Code sich so aufspalten lässt, wie du das hier gemacht hast, dann wäre folgendes doch viel sinnvoller:

    switch(wert) {
            case 1:
                machWas();
                break;
            case 2:
                machWasAnderes();
                break;
            case 3:
                machWas(); // TADAA!
                machNochMehr();
                break;
        }
    

    Ja, mir ist nach diesem Beitrag hier:

    wx++ schrieb:

    Entweder doch die Reihenfolge ändern (warum willst du das nicht?) oder den Code von case 3 in eine Funktion packen, die dann sowohl in case 1 als auch in case 3 aufgerufen wird.

    schon klar geworden das ich da Unfug verzapft habe 😃



  • Mizar schrieb:

    Ja, mir ist nach diesem Beitrag hier:

    wx++ schrieb:

    Entweder doch die Reihenfolge ändern (warum willst du das nicht?) oder den Code von case 3 in eine Funktion packen, die dann sowohl in case 1 als auch in case 3 aufgerufen wird.

    schon klar geworden das ich da Unfug verzapft habe 😃

    Ups, den hab ich gar nicht gesehen. In dem Fall hab ich nichts gesagt.



  • AlexXXx hat gesagt, dass er den Aufruf sparen möchte.

    Ob das Sinn macht ist eine andere Frage, welche er in einm neuen Thread (oder halt auch hier) stellen kann. Aber wenn er sicher ist, dass er den Funktionsaufruf nicht möchte, dann müssen wir das atm halt so annehmen.

    Ich gehe mal davon aus, dass der Funktionsaufruf erwiesenermassen nicht gebrauchen kann. Ansonsten müssten wir hier nicht über Sinn von goto sprechen, sondern darum, warum du keine Funktion haben willst.


Anmelden zum Antworten