Switch, Funktionsaufruf und Cout



  • @GMgenia

    Du kannst das Programm mal mit Zettel und Stift durchspielen.
    Nimm dir so einen 8x8 Notizblock.

    Funktionen sind wie Arbeitsanweisungen.
    Du befolgst nacheinander die Anweisungen.
    Bei einem Funktionsaufruf schreibst du die aktuelle Zeilennummer auf einen Zettel legst ihn neben dich und machst mit der aufgerufenen Funktion weiter.
    Bei einem return oder der letzten } der Funktion nimmst du den obersten Zettel von dem Stapel und machst an der notierten Zeile im Programm weiter. Den Zettel schmeißt du weg.

    PS: bei einem neuen Aufruf einer Funktion gibt es auch neue lokale Variablen.



  • @DirkB sagte in Switch, Funktionsaufruf und Cout:

    die aktuelle Zeilennummer

    Ne, eben nicht. Dann kappiert er verschachtelte Funktionsaufrufe wieder nicht.



  • @hustbaer sagte in Switch, Funktionsaufruf und Cout:

    @GMgenia
    Was meinst du wo es weiter geht, wenn die Ausführung an dieser Stelle

    void otherFunktion()
    {
      std::cout << "otherFunktion()\n";
      funktion();
    } // <---------------------------
    

    angekommen ist?

    Genau darum geht es in meiner Frage. Warum kommt das Funktionsende erst zum Abschluss des Programmablaufs? Wenn eine Ausgabe nach dem Funktionsaufruf steht, kommt auch dieser erst zum Ende des Programmablaufs.



  • Da, ich habs dir aufgemalt:

    +--- main() ----+     +--- function() ------------------+
    | function(); --|---->|  std::cout << ">";              |
    | return 0; <---|--+  |  switch(_getch()) { *)          |
    +---------------+  |  |  case '1':                      |     +--- otherFunction() -----------------+
                       |  |      otherFunction(); ----------|---->|  std::cout << "otherFunction()\n";  |      +--- function() ------------------+
                       |  |      std::cout << "\nBack "; <--|--+  |  function(); -----------------------|----->|  std::cout << ">";              |
                       |  |      break;                     |  +--|--[return;] <------------------------|--+   |  switch(_getch()) { *)          |
                       |  |  }                              |     |                                     |  |   |  case '1':                      |     +--- otherFunction() -----------------+    
                       +--|--[return;]                      |     +-------------------------------------+  |   |      otherFunction(); ----------|---->|  std::cout << "otherFunction()\n";  |     +--- function() ----------------------+
                          |                                 |                                              |   |      std::cout << "\nBlack "; <-|--+  |  function(); -----------------------|---->|  std::cout << ">";                  |
                          +---------------------------------+                                              |   |      break;                     |  +--|--[return;] <------------------------|--+  |  switch(_getch()) { *)              |
                                                                                                           |   |  }                              |     |                                     |  |  |      case '1':                      |      +--- otherFunction() -----------------+
                                                                                                           +---|--[return;]                      |     +-------------------------------------+  |  |          otherFunction(); ----------|----->|  std::cout << "otherFunction()\n";  |     +--- function() -------------------+
                                                                                                               |                                 |                                              |  |          std::cout << "\nBack "; <--|--+   |  function(); -----------------------|---->|  std::cout << ">";               |
                                                                                                               +---------------------------------+                                              |  |          break;                     |  +---|--[return;] <---------------------------+  |  switch(_getch()) { ----[ input != 1 ]---+
                                                                                                                                                                                                |  |  }                                  |      |                                     |  |  |  case '1':                       |       |
                                                                                                                                                                                                +--|--[return;]                          |      +-------------------------------------+  |  |      otherFunction();            |       |
                                                                                                                                                                                                   |                                     |                                               |  |      std::cout << "\nBack ";     |       |
                                                                                                                                                                                                   +-------------------------------------+                                               |  |      break;                      |       |
                                                                                                                                                                                                                                                                                         |  |  }                               |       |
                                                                                                                                                                                                                                                                                         +--|--[return;] <---------------------|-------+
                                                                                                                                                                                                                                                                                            |                                  |
                                                                                                                                                                                                                                                                                            +----------------------------------+
    
    

    * ) Eingabe ist '1'.



  • Dieser Beitrag wurde gelöscht!


  • So, jetzt sollt's stimmen.



  • @Swordfish sagte in Switch, Funktionsaufruf und Cout:

    So, jetzt sollt's stimmen.

    Oh, das Bild ist supper! Jetzt habe ich verstanden!!
    Erst ab der Eingebe !=1 kehrt der Programmablauf zurück und die Ausgabe der cout wird auf dem Bildschirm ausgegeben! Darauf wäre ich nicht gekommen.... Vielen Dank für diese super Erklärung!!



  • @Swordfish OT: hast du nen tool fuer deine ascii art?



  • @Cardiac Ja, Notepad++ ^^



  • @Cardiac ASCII Art Studio schaut nett aus.
    Da gibts was brauchbar aussehendes online: https://asciiflow.com



  • @Swordfish Niedlich, ich hab versucht was derartiges zu finden, aber google war der meinung deutsch verwenden zu muessen, also waren die ergebnisse entsprechend misearbel...

    merci fuer den link :>


Anmelden zum Antworten