Funktionsrückgabewert einmalig abfragen

Hallo,

wie kann man eine Funktion durch einmaliges Abfragen auf mehrere Rückgabewerte hin untersuchen.

Ich möchte eine Funktion praktisch einmalig aufrufen und je nachdem ob diese mir eine 0, eine 1 oder eine 2 zurückgibt unterschiedliche „Aktionen“ auslösen.

Geht dies nur mit einer zusätzlichen Variablen, die das „Ergebnis“ der Funktion zunächst einmal übergeben bekommt, oder gibt es eine alternative Möglichkeit (vielleicht etwas, das sich so ähnlich wie switch/case anfühlt)?

Gruß Chris

Ich verstehe Dich jetzt nicht.
Mir scheint Du denkst zu kompliziert.
Was gefällt Dir an Switch/case nicht?

Grüße Uwe

Ich frage mich, ob ich eine Funktion einmalig abfragen und deren Rückgabewerte verarbeiten kann, ohne hierfür zusätzlich eine Variable erstellen zu müssen.

Gruß Chris

Chris72622:
Ich frage mich, ob ich eine Funktion einmalig abfragen und deren Rückgabewerte verarbeiten kann, ohne hierfür zusätzlich eine Variable erstellen zu müssen.

Gruß Chris

Und was hast du gegen Variablen?
Aber du kannst auch den Rückgabewert direkt auwerten bzw. abfragen.

HotSystems:
Aber du kannst auch den Rückgabewert direkt auwerten bzw. abfragen.

Ja, ich weiss. Wenn ich das aber mache, kann ich immer nur nach einem der drei von mir angegeben Rückgabewerte "fragen", oder? Und genau darauf zielt meine Frage ab.

Gruß Chris

Das mußt du mir erklären. Liefert deine Funktion 3 Werte gleichzeitig? Dann geht das mit einem Array.

Am ähnlichsten wie ein switch case ist ein switch case.

Neben der Frage "was hast du gegen lokale Variable?", die ich auch stellen würde,
kannst du es natürlich so machen:

int myfunc(); // liefert 0, 1 oder 2

void loop() {
   switch ( myfunc() ) {
   case 1: Aktion_1 (); break;
   case 2: Aktion_2 (); break;
   default: Aktion_0(); break;
   }
}

Warum keine Schrittkette?

void loop()
{
  static uint8_t step = 0;

  switch (step)
  {
    case 0:
      step += func();
      break;
    case 1:
      step += func();
      break;
    //...
    default:
      mode = 0;
  }

}

int8_t func(void)
{
  if (/* ... */) return -1;
  else if (/* ... */) return 1;
  else return 0;
}

Ich wusste nicht, dass man einen Funktionsaufruf direkt in ein switch() eines switch/case-Konstrukts einbauen kann/darf. Vielen Dank michael_x- Problem gelöst. Sorry, für die Verwirrung, die ich wohl gestiftet habe.

Gruß Chris

Wieso sollte das nicht gehen?

Wieso sollte das nicht gehen?

Wer C kennt weiss, dass es gehen sollte.
Wer C kennt ist evtl. aber auch vorsichtig, ob garantiert ist, dass die Funktion nur einmal aufgerufen wird. Der Compiler erlaubt auch viel Unsinn :wink:
Wer da (über-)vorsichtig ist, sollte mit einer lokalen Hilfsvariablen arbeiten. Die kann man dann auch bei Bedarf in eine Serial.println Testausgabe einbauen. Einfache Anweisungen sind auch leichter verständlich.

Wie dem auch sei.. jedenfalls bin ich nun wieder einmal ein wenig schlauer. :sunglasses:

Dafür nochmals recht herzlichen Dank.

Gruß Chris