Schleifen



  • Das ist doch eine reine Definitionsfrage wie man das nennt. Im Standard heißen die Dinger nur Statement. Also while-statement, for-statement etc. Zusammengefasst sind sie unter der Bezeichnung iteration statements
    Den Begriff Zählschleife für for halte ich sogar für falsch, da for doch mehr kann als nur zählen.



  • so hab ich das nach irgendeiner DIN-Norm gelernt 😉



  • Hi,
    Danke an euch alle, ich habe das jetzt endlich verstanden. 😃



  • Angesichts der Tatsache, dass im C++-FAQ noch nix über Schleifen steht und hier einige sehr gute Erklärungen sind, wie wärs? *zu-CStoll-rüberschiel*



  • Ehm aber auch einiges falsches ...

    Kommentare zu zwutz

    for erwartet 3 (optionale, sprich nicht zwingend benötigte) Anweisungen die durch ein Semikolon (;) voneinander getrennt werden.

    So nicht direkt richtig. Die Anweisungen können leer sein, müssen aber doch vorhanden sein.

    Danach wird das Programm hinter der abschließenden geschweiften Klammer ausgeführt ( } )

    Man braucht keine "{" und "}". Mir fällt gerade der Begriff dafür nicht ein, aber bsw. folgendes ist ebenfalls korrekt:

    for (std::size_t i(0); i < 10; ++i)
        if (i % 10)
            foo();
        else
            bar();
    

    ...

    for( ; ; ; )
    {}
    

    Na wenn du schon diese unschöne Schleife demonstrierst:

    for(;;);
    

    wäre korrekt. Du hast ein Semikolon zu viel eingebracht ...

    manuell unterbrechen kann man die Schleife mittels

    break;
    

    Nach Möglichkeit sollte man die Abbruchbedingungen aber als zweite Anweisung angeben. Dadurch bleibt die Schleife und deren Bedingungen übersichtlicher.

    Das zweite sagen wir mal so ist Geschmacksache. Allerdings ist es auch mein Empfinden.

    Evtl. solltest du aber auch noch

    continue;
    

    erwähnen. Damit wird der Rest der Anweisung überprungen und wieder der Anweisungsteil der Schleife ausgeführt.
    [/cpp]for (std::size_t i(0); i < 10; ++i)
    {
    if (i % 2 == 0) continue;
    std::cout << i << std::endl;
    }[/cpp] ...

    Dann kann man natürlich auch bei einer while-Schleife eine Endlosschleife konstruieren:

    while(true);
    

    ...

    Anfügung zu CStoll

    Technisch ist for( Init ; Bed ; Update )Rumpf; (fast) äquivalent zu

    Zu beachten ist dabei, das Variablen die in Init deklariert wurden, nur in der Schleife gelten und danach nicht mehr existieren. Ihr Scope ist da beendet. Wichtig! Microsoft Visual C++ 6 beachtet genau dies Regel nicht!



  • zwutz schrieb:

    ...Kopfgesteuerte Schleife...
    Fussgesteuerte Schleife...

    Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ? 😉

    Gruß,

    Simon2.


  • Mod

    Simon2 schrieb:

    zwutz schrieb:

    ...Kopfgesteuerte Schleife...
    Fussgesteuerte Schleife...

    Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ? 😉

    Gruß,

    Simon2.

    Besser als Schwanzgesteuert :p - im Ernst, wenn solche Unmöglichkeiten wie 'Seiteneffekte' normaler Sprachgebrauch sind, sind diese Schleifenbezeichnungen doch recht harmlos.



  • hi (D)Evil

    hast natürlich recht... hab in der Eile ein paar Fehler untergejubelt... gut aufgepasst *hust* ^^

    und ja, ich weiß, dass man schleifen auch ohne geschweifte Klammern definieren kann... allerdings verschließe ich mich aus Prinzip vor dieser Möglichkeit.



  • camper schrieb:

    Simon2 schrieb:

    zwutz schrieb:

    ...Kopfgesteuerte Schleife...
    Fussgesteuerte Schleife...

    Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ? 😉

    Gruß,

    Simon2.

    Besser als Schwanzgesteuert :p ...

    Da hast Du allerdings Recht ! 😃

    Gruß,

    Simon2.



  • (D)Evil schrieb:

    Danach wird das Programm hinter der abschließenden geschweiften Klammer ausgeführt ( } )

    Man braucht keine "{" und "}". Mir fällt gerade der Begriff dafür nicht ein, aber bsw. folgendes ist ebenfalls korrekt:

    for (std::size_t i(0); i < 10; ++i)
        if (i % 10)
            foo();
        else
            bar();
    

    ...

    Meinst du "Compund statement"? Eigentlich ist die Variante ohne Klammern die (wie drücke ich das aus?) direktere - der Schleifenrumpf besteht aus genau einer Anweisung. Wenn man mehrere Sachen in der Schleife ausführen will, fasst man diese zu einem Compound Statement zusammen, daher bekommt man dann die geschweiften Klammern.

    Anfügung zu CStoll

    Technisch ist for( Init ; Bed ; Update )Rumpf; (fast) äquivalent zu

    Zu beachten ist dabei, das Variablen die in Init deklariert wurden, nur in der Schleife gelten und danach nicht mehr existieren. Ihr Scope ist da beendet. Wichtig! Microsoft Visual C++ 6 beachtet genau dies Regel nicht!

    Ja, das ist einer der zwei Gründe, warum ich dort oben "fast" geschrieben habe. Der zweite Unterschied ist das Ziel für continue; .


Anmelden zum Antworten