goto-Verwendung umgehen...aber wie ?



  • hat jmd ne Idee die Verwendung von goto zu verhindern/umgehen, ohne das gleiche switch nochmals im defazlt zweig einzubauen...?

    Init:  
       switch(Wert)
       {
          case XXXXX:
             // ok, weitere Anweisungen...
             break;
          case YYYYYY:
             // ok, weitere Anweisungen...
             break;
          case ZZZZZZ:
             // ok, weitere Anweisungen...
             break;
          default:
             // hier "Wert" auf einen Standard-Wert setzen und diesen nochmals switchen...
             // dabei ist der Standard-Wert entweder XXXXX, YYYYYY oder ZZZZZZ
             goto Init;
             break;
       }
    

    Danke schonmal! 🙂


  • Administrator

    bool bRepeat;
    do
    {
       bRepeat = false;
       switch(Wert) 
       { 
          case XXXXX: 
             // ok, weitere Anweisungen... 
             break; 
          case YYYYYY: 
             // ok, weitere Anweisungen... 
             break; 
          case ZZZZZZ: 
             // ok, weitere Anweisungen... 
             break; 
          default: 
             // hier "Wert" auf einen Standard-Wert setzen und diesen nochmals switchen... 
             // dabei ist der Standard-Wert entweder XXXXX, YYYYYY oder ZZZZZZ 
             BRepeat = true;
             break; 
       }
    } while(bRepeat)
    

    sowas?

    Grüssli



  • hm joaahhh....hmm n bissl dirty is aber noch ...aber schonmal danke 😉


  • Administrator

    WechDamit schrieb:

    hm joaahhh....hmm n bissl dirty is aber noch ...aber schonmal danke 😉

    bissl dirty? Wieso das denn? *ganz interessiert guckt*

    Grüssli



  • hi,

    du kannst es auf die hardcore-manier machen:

    type_of_wert f(type_of_wert Wert)
    {
       switch(Wert)
       {
          case XXXXX:
             // ok, weitere Anweisungen...
             break;
          case YYYYYY:
             // ok, weitere Anweisungen...
             break;
          case ZZZZZZ:
             // ok, weitere Anweisungen...
             break;
          default:
             return f( dein_ausgesuchter_standardwert );
             break;
       }
       return irgendwas;
    }
    


  • n egal...habs jez so gemacht do-while) .....is gut! 😉 danke!


  • Mod

    ist das nicht irgendwie umständlich? wenn wert etwas lokales ist, dann würde es reichen, den default-wert eben tatsächlich im default-zweig auszuführen. ansonsten erreicht man etwas durch umordnen (schließlich muss default: keinesfalls das letzte label in einem switch statement sein - das ist nur (sinnvolle) konvention). also

    type_of_wert f(type_of_wert Wert)
    {
       switch(Wert)
       {
          case XXXXX:
             // ok, weitere Anweisungen...
             break;
          case YYYYYY:
             // ok, weitere Anweisungen...
             break;
          case ZZZZZZ:
             // ok, weitere Anweisungen...
             break;
          default:
             type_of_wert = dein_ausgesuchter_standardwert; // in diesem falle, sind die beiden zeilen überflüssig
          case dein_ausgesuchter_standardwert; // wenn wert nicht gerade ein funktionsargument ist, könnte es sinn machen
             // irgendwas
    
       }
       return irgendwas;
    }
    


  • camper schrieb:

    wenn wert etwas lokales ist

    ist er aber nicht 😉 : ist global



  • wenn global, dann die zwanghaftigkeit von global überprüfen und lieber sein lassen, wenns passt.



  • WechDamit schrieb:

    hm joaahhh....hmm n bissl dirty is aber noch ...aber schonmal danke 😉

    was ist an dem Code dirty? Würde mich mal interessieren da ich so sauber wie möglich programmieren will.


Anmelden zum Antworten