weiterspringen zum Ende es Schleifen durchgangs?



  • for(x=1;x<5;x++) { 
                                                   tab;
                                                   if(x==Karte1.x && y==Karte1.y) {
                                                        printf("%c",memory[Karte1.x][Karte1.y]);
                                                   }
                                                   else if(x==Karte2.x && y==Karte2.y) {
                                                        printf("%c",memory[Karte2.x][Karte2.y]);
                                                   }
                                                   else {
                                                        for(z=0;z<16;z++) {
                                                             if(x==Gezogen[z].x && y==Gezogen[z].y) {
                                                                           printf("%c",deleted);
                                                                           break;
                                                             }
                                                        }
                                                   }
                                                   printf("%c",flipside);
                                  }
    

    das ist eine schleife die ich in einem meiner programme brauch. ist unrelevant was sie macht, nur wie man sehen kann wurde quasi "else" schon einmal verwendet wodurch ich das letzte

    printf("%c",flipside);
    

    in keine else schleife stecken kann, obwohls quasi genau "else" erfüllen soll.

    Meine frage ist, gibt es einen Befehl der quasi Das ende des schleifen durchgangs einleiten würde? (würde quasi gut als else ersatz fungieren)

    dass man bei folgendem beispiel

    for(x=0;x<13;x++) {
                      if(x==4) stop;
                      y++;
    }
    

    wenn x=4 ist halt dieser befehl (habs einfach mal stop genannt) in kraft tritt und automatisch die schleife neubeginnt (also quasi den aktuellen durchlauf beendet und somit den durchlauf "x=5" beginnt)ö

    weiss da jemand ne lösung?



  • Der Befehl heißt

    continue
    


  • ach continue geht dafür auch? dachte das ginge nur bei switch..
    danke ^^



  • ysparrow schrieb:

    ach continue geht dafür auch? dachte das ginge nur bei switch..

    Bei switch geht doch break als Abbruch eines Falles? Oder seit wann kann man da continue benutzen?



  • afaik macht break doch den switch zuende und continue lässt die nächste option mit überprüfen, oder? kp bin eh mehr fan von if else xD



  • YamiSparrow schrieb:

    afaik macht break doch den switch zuende und continue lässt die nächste option mit überprüfen, oder? kp bin eh mehr fan von if else xD

    continue springt zum schleifenkopf
    break springt hinter die schleife



  • Hallo ysparrow,

    natürlich kann man mit continue eine Schleife beenden. Aber das ist alles andere als schöne Programmierung! Auch ein break in einem if ist nicht besonders toll...
    Wenn Du Code produzieren willst, den man einfach versteht würde ich Deine Beispiele in etwa so schreiben:

    char gezogenFlag;
    for(x=1;x<5;x++)
    { 
       tab;        // was auch immer das ist...
       if(x==Karte1.x && y==Karte1.y)
       {
          printf("%c",memory[Karte1.x][Karte1.y]);
       }
       else if(x==Karte2.x && y==Karte2.y)
       {
          printf("%c",memory[Karte2.x][Karte2.y]);
       }
       else
       {
          for(z=0, gezogenFlag = 0;z<16 && gezogenFlag == 0;z++)
          {
             if(x==Gezogen[z].x && y==Gezogen[z].y)
             {
                printf("%c",deleted);
                gezogenFlag = 1;
             }
          }
          if (gezogenFlag == 0)
          {
             // for schleife wurde durchlaufen, ohne dass x und y gefunden wurden
             printf("%c", flipside);
          }
       }
    }
    
    char flag;
    for(x=0, flag = 0;x<13 && flag == 0;x++)
    {
       if(x==4)
       {
          flag = 1;
       }
       else
       {
          y++;
       }
    }
    

    Schaut zwar vielleicht auf den ersten Blick umständlicher aus, aber wenigstens übersieht man nicht so schnell ein continue oder break...



  • Die flow-control schlüsselwörter wurden uns nicht ohne grund von unserem schöpfer gegeben!

    Diese machen es viel leichter ersichtlich, dass die schleife abgebrochen wird anstatt irgendwelche flags zu benutzten, die später meisten in einem hä enden und auch noch die geschwindigkeit durch die höhere anzahl an überprüfungen verringenr.



  • Ampfing schrieb:

    natürlich kann man mit continue eine Schleife beenden. Aber das ist alles andere als schöne Programmierung! Auch ein break in einem if ist nicht besonders toll...

    mit continue kann man den nächsten schleifendurchlauf starten. und der rest ist auch ausgemachter blödsinn^^
    🙂



  • goto



  • man kanns auch übertreiben mit dem "strukturierten programmierung"

    genauso: sag niemals - NIE GOTO

    goto wäre zwar schwachsinnig aber es macht in manchen situationen durchaus sinn.



  • Ampfing schrieb:

    Hallo ysparrow,

    natürlich kann man mit continue eine Schleife beenden. Aber das ist alles andere als schöne Programmierung! Auch ein break in einem if ist nicht besonders toll...
    Wenn Du Code produzieren willst, den man einfach versteht würde ich Deine Beispiele in etwa so schreiben:
    [...]
    Schaut zwar vielleicht auf den ersten Blick umständlicher aus, aber wenigstens übersieht man nicht so schnell ein continue oder break...

    Das sieht nicht nur umständlicher aus, sondern ist es auch. Wieso sollte man Flags setzen, wenn es mit einfachen continue und break -Anweisungen auch geht? Und was das übersehen anbelangt, da hätte ich bei Flags eher Zweifel, ob man immer überblickt, wann welches Flag gesetzt ist und wo was abgefragt wird. Aber du darfst es natürlich gerne kompliziert machen.

    Stelfer schrieb:

    goto wäre zwar schwachsinnig aber es macht in manchen situationen durchaus sinn.

    Zum Beispiel, wenn man aus tief verschachtelten Schleifen heraus springen will. Dennoch würde ich grundsätzlich eher auf goto verzichten. Es führt schneller zu Problemen, als man denkt.

    Stelfer schrieb:

    YamiSparrow schrieb:

    afaik macht break doch den switch zuende und continue lässt die nächste option mit überprüfen, oder? kp bin eh mehr fan von if else xD

    continue springt zum schleifenkopf
    break springt hinter die schleife

    Es ging um continue und break in switch -Blöcken, nicht in Schleifen. Und continue kann man in diesem Falle nicht anwenden.



  • Nexus schrieb:

    Ampfing schrieb:

    Hallo ysparrow,

    natürlich kann man mit continue eine Schleife beenden. Aber das ist alles andere als schöne Programmierung! Auch ein break in einem if ist nicht besonders toll...
    Wenn Du Code produzieren willst, den man einfach versteht würde ich Deine Beispiele in etwa so schreiben:
    [...]
    Schaut zwar vielleicht auf den ersten Blick umständlicher aus, aber wenigstens übersieht man nicht so schnell ein continue oder break...

    Das sieht nicht nur umständlicher aus, sondern ist es auch. Wieso sollte man Flags setzen, wenn es mit einfachen continue und break -Anweisungen auch geht? Und was das übersehen anbelangt, da hätte ich bei Flags eher Zweifel, ob man immer überblickt, wann welches Flag gesetzt ist und wo was abgefragt wird. Aber du darfst es natürlich gerne kompliziert machen.

    Stelfer schrieb:

    goto wäre zwar schwachsinnig aber es macht in manchen situationen durchaus sinn.

    Zum Beispiel, wenn man aus tief verschachtelten Schleifen heraus springen will. Dennoch würde ich grundsätzlich eher auf goto verzichten. Es führt schneller zu Problemen, als man denkt.

    Stelfer schrieb:

    YamiSparrow schrieb:

    afaik macht break doch den switch zuende und continue lässt die nächste option mit überprüfen, oder? kp bin eh mehr fan von if else xD

    continue springt zum schleifenkopf
    break springt hinter die schleife

    im so sorry ;) hast recht Es ging umcontinueundbreak inswitch-Blöcken, nicht in Schleifen. Undcontinue` kann man in diesem Falle nicht anwenden.


Log in to reply