repeat-until in C++?



  • @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