switch case früher verlassen

Hallo,

ich würde gerne diesen switch-Fall vorzeitig verlassen:

switch(MSR_st)
{
  case 1:  // Hauptprogramm
    {
      t_func_glob();          // 10 // Tastenkombination für "Aufruf Globale Scalerauswahl"
      t_func_main();          // 10 // Tastenkombinationen Hauptprogramm (scalerspezifisch)
      MSR_st_sw();            // 20 // Umschaltlogik für den Wechsel zwischen Haupt- und Testpattern-Programm
    }
    break;
}

Nach dem Durchlaufen von t_func_glob() und t_func_main() soll MSR_st_sw() manchmal [u]nicht[/u] auch noch ausgeführt werden.

Ob MSR_st_sw() ausgeführt werden soll, oder nicht, entscheidet sich erst in t_func_main() und äußert sich dadurch, dass sich die Variable MSR_st ändert.

Wie bewerkstelle ich dies am elegantesten?

Gruß Chris

lass t_func_main() einen boolean zurückgeben und frage mit if auf diesen Wert ab

z.B.:

if(t_func_main() == true)
   MSR_st_sw();

Danke.

“…Wald vor lauter Bäumen und so…” :stuck_out_tongue:

Gruß Chris

Nur der Vollständigkeit halber: Natürlich geht auch

switch(MSR_st)
{
case 1: 
   t_func_glob(); 
   if(t_func_main() != true)  break;  // evtl. vorzeitig beenden
   MSR_st_sw();
   break;
case 2:
   //...
}

Auch ein ``` return; ``` ist jederzeit erlaubt und beendet die aktuelle Funktion...

Wie war das mit dem return gemeint?

Geht es nicht eleganter als oben bereits aufgeführt.

Hier noch ein Beispiel:

In jeder der drei Funktionen kann zelle_01 geändert werden. Wurde zelle_01 auf diese Weise geändert, soll dieser Fall unmittelbar verlassen werden, so dass sämtliche folgenden Funktionen innerhalb des Falles nicht mehr aufgerufen werden.

switch(zelle_01)
{
  case 0:
  funktion_01();  // <- Wird innerhalb dieser Funktion "zelle_01" geändert,
  funktion_02();  // soll diese
  funktion_03();  // und diese Funktion nicht mehr aufgerufen werden.
  break;
  
  case 1:
  funktion_01();
  funktion_02();
  funktion_03();
  break;
}

Gruß Chris

Das gleiche. Wenn eine der Funktionen den Wert ändert gib true zurück (dazu den Rückgabe-Wert als boolean definieren und entsprechend return true und return false machen) und mach nach dem Aufruf return.

if(funktion_01()) return;

Meinst Du so?

switch(zelle_01)
{
  case 0:
  funktion_01();
  if(funktion_01()) return;
  funktion_02();
  if(funktion_02()) return;
  funktion_03();
  break;
}

Gruß Chris

Nein. Mit if(func()) wird die Funktion doch schon aufgerufen. Du machst das da zweimal.

Verstehe ich nicht. Ich kann doch nicht einfach nur..

switch(zelle_01)
{
  case 0:
  if(funktion_01()) return;
  if(funktion_02()) return;
  funktion_03();
  break;
}

..schreiben. :relaxed:

Natürlich kannst du.

Das ist die Kurzform von dem hier:

if(func() == true)
   return;

Das geht übrigens davon aus, dass das switch-statemement selbst in einer Funktion steht. Wenn du das in loop() machst, fängt loop() wieder von vorne an.

Und halt wie gesagt die Funktion korrekt schreiben. Sowas:

boolean func()
{
     int alterWert =  ...

     int neuerWert = ...

     return (alterWert != neuerWert);
}

Ok.. ich werde das testen.

Vielen Dank soweit.

Gruß Chris

Edit: Danke auch für Deine zusätzlichen Erklärungen! 8)