repeat-until in C++?



  • Wenn du schon for, while und do/while in einem Atemzug nennen musst, dann solltest du diverse goto-Konstrukte nicht vergessen. Sind im Grunde genommen später alles irgendwelche Jumps und Compares.



  • Jo schon, aber wer will Spaghetti-Code :p



  • simon.phoenix schrieb:

    Jo schon, aber wer will Spaghetti-Code :p

    Ich rede von der Assembler-Ebene. Da ist das nämlich alles dasselbe. Du hast doch die Weisheit verbreitet, dass die Schleifen im Prinzip alle dasselbe sind. Auf Assemblerebene mag das bedingt stimmen aber nicht auf der Ebene einer Hochsprache. Natürlich kann man jede Schleifenart mit jedem Schleifentyp konstruieren, aber es hat schon einen Sinn, dass es mehrere gibt. Und der Sinn ist sicher nicht nur die Bequemlichkeit.



  • Sorry, in Bezug auf Schleifen hatte ich goto-Konstruktionen nicht miteinbezogen und von Assembler habe ich nicht gesprochen 🙂



  • geht mit allen (for und while(){} brauchen eine hilfsvariable um den ersten durchlauf zu forcieren)



  • peterchen schrieb:

    geht mit allen (for und while(){} brauchen eine hilfsvariable um den ersten durchlauf zu forcieren)

    ??? Wieso brauchen die ne hilfsvariable?
    Fußgesteuert

    for(;true;)
    {
      /*code*/
      if (Bedingung) break;
    }
    

    sieht bei der while schleife im prinzip genauso aus.

    Wenn du min. einen durchlauf brauchst, baust dir halt was fußgesteuertes mit hilfe von for und while.

    ich würd aber ja gern mal wissen was das fürn prof ist, wenn er als aufgabe gibt "REPEAT ... UNTIL" mit "do{ ... }while()" nachzubauen... 🙄



  • @freak:

    for(;true;) 
    { 
      // ...
      if (peterchenEvil)
      {
         Bedingung = false;
         continue;
      }
      // ...
      if (Bedingung) break; 
    }
    

    🙄

    Ist aber die Frage ob das gehen muß... für reine Repeat-Until-Semantik geht's auch ohne, das it richtig.



  • Ich steh grad aufm Schlauch!
    Wenn du bei der for/while Variante n Problem hättest, würdest du s doch genauso bei Repeat until haben.

    Meinst du jetzt das Continue? Die schleife springt wieder zum kopf, ok, aber das sollte dem programmierer bekannt sein 😉 wenn er in diesem fall beenden will baut er halt ein continue ein, oder an anderer stelle nochmel die if bedingung die zum schleifenabbruch führt.



  • Wenn du bei der for/while Variante n Problem hättest, würdest du s doch genauso bei Repeat until haben

    nein, weil continue die (im Schleifenkonstrukt angegebene) Bedingung noch mal testet. Natürlich kannst du

    for(;true;)  
    {  
      // ... 
      Bedingung = ...;  // Bedingung ändert sich
      // ...
    
      if (peterchenEvil)  // Bedingung für continue
      {
        if (Bedingung) 
          break;
        else
          continue;
      }
    
      // ...
    
      if (Bedingung) break;  
    }
    

    schreiben - ist aber m.E. ein deutlicher Nachteil: Es ist keine echte repeat/until Schleife, sondern verhält sich nur in den <i>meisten</i> Fällen so, um sie richtig zu nutzen, muß man die Implementation kennen.



  • ahso. naja, im normalfall würde man ja auch "do...while()" nehmen. In nem vernünftigen quelltext würd ich sowas nie einsetzen (also son for konstrukt) um das erfragte ergebnis zu bekommen 😉
    Die Aufgabe hätte das konstrukt wohl dennoch bestanden, da es ein "Repeat...until" konstrukt simuliert, bzw. genau so funktionieren *kann*, wenn man es wie unten einsetzt.

    @continue Das ist aber kein bestandteil des "ersatzkonstrukts". wird continue aufgerufen/ausgeführt(?), dann wird halt das true im schleifenkopf nochmal interpretiert.



  • ich lese hier mehrfach

    for (; true ;)
    

    ! dabei sollte bekannt sein, dass man entweder

    for (;;)
    

    (IMHO das beste) oder

    while (true)
    

    schreibt. naja, das nur am rande.



  • is das nich eigentlich schnurz?
    bewirkt beides das selbe. steht eigentlich was darüber im standard?

    in c++-gepackt steht folgendes:

    for(initialisation;condition;increment){
      statement block
    }
    

    demnach dürfte es also alles ok, höchstens unschön.



  • THE_FreaK schrieb:

    is das nich eigentlich schnurz?

    for(;;)
    for(;true;)
    while(1)

    etc.
    ist alles das selbe.

    Aber: for(;true;) schaut verwirrend aus - denn das true ist unnuetz.
    Da doch lieber (wie von Mr.N vorgeschlagen) for(;;)



  • Bei while(true){...} meckern manche Compiler und schmeissen ne Warnung. Ich schreibe immer for(;;) auch wenn while(true) besser aussieht.



  • also das beides geht war mir klar, mich würd nur mal interessieren, was der standard dazu sagt. denn die "for(;;){}" müsste dann ja als "for(;true;){}" interpretiert werden (btw: hab auch noch nie das true mitgeschrieben ^^), wobei bei allen anderen dingen ein ein "foo(,,)" doch zum beispiel zur folge hätte, dass 3x 0 übergeben wird (es sei denn es gibt standardparameter).



  • THE_FreaK schrieb:

    also das beides geht war mir klar, mich würd nur mal interessieren, was der standard dazu sagt

    er sagt, dass for(;;) eine Endlosschleife ist.
    Ich verstehe nicht worauf du hinauswillst.



  • so in etwa 😉

    ist for(;;) explizit als endlosschleife erwähnt? oder ist das nur ein nebenefekt, der z.B. dadurch zustande kommt, das *condition*, im falle das nichts angegeben wird, automatisch *true* ist.
    Ein ähnliches beispiel währe ja der returnwert von main: wird kein "return irgendwas;" geschrieben wird automatisch 0 zurückgegeben.

    ich hab keine entsprechenden links, aber mich interessiert der genaue wortlaut zum thema.


Anmelden zum Antworten