Frage zu Schleife



  • Hallo zusammen,
    ich habe eine kurze Frage. Kann ich eine for-Schleife durch eine Bedingung stoppen? Wenn nicht, welche Art von Schleife (vll. while-do?) soll ich verwenden?

    Vielen Dank
    lg, freakC++



  • Ja, mit 'break' kannst Du eine Schleife beenden.



  • Also bespielsweise so:

    for (int i=0; i<15; i++)
    {
     if (i=5) break;
    }
    

    ??

    Vielen Dank
    lg, freakC++



  • du weißt also anscheinend immernoch nicht was der Unterschied zwischen einer Zuweisung und einem Vergleich ist (Zeile 3)

    probier deinen Quellcode doch einfach mal aus und schau welche Werte i annnimt



  • Hallo,
    ich weiß es sehr wohl, doch schmeiß ich es irgendwie manchmal durcheinander! Ich bin halt noch kein Profi, sondern das Gegenteil! WEnn nun i==5 stünde, würde dann das Programm laufen?

    Vielen Dank
    lg, freakC++



  • Vergleich '=='
    Zuweisung '='
    aber wie schon Linnea geschrieben hat, einfach mal einen Breakpoint setzen (oder ne ShowMessage oder was auch immer Du benutzt zum Debug) und nachschauen welche Werte vorhanden sind oder ob das Program in die Bedingung springt.
    Ich bin nun wirklich kein Profi, aber das sollte man sich als erstes aneignen. wenn Du es immer verwechselst dann scheib es groß auf einen Zettel, mit der Zeit geht es dann von allein 🙂 Abgesehen davon passiert das auch 'Profis' (die Verwechselung) nur da ist es dann ein 'typo'. Das fatale daran ist, daß der Compiler nicht meckert.
    Natürlich kann man auch eine andere Abfrage verwenden, aber das Prinzip ist richtig.



  • OldMan00 schrieb:

    Das fatale daran ist, daß der Compiler nicht meckert.

    Zumindest meiner mokiert sich über so etwas in einer Warnung.



  • Hallo freakC++,

    die Beispiele werden zwar auch gleich recht sinnfrei, aber als Tip noch: Du kannst natürlich auch mehrere Lauf-Bedingungen in der for-Schleife kombinieren:

    for(short i= 0; ((i <= 4) || (i >=6)); i++)
    {
        // diese Schleife wird verlassen, wenn i gleich 5 ist
    }
    

    oder so zB.

    for(short i= 0, j= 2; ((i < 4) && (j < 12)); i++, j= j+2) 
    {
        // diese Schleife läuft, solange i kleiner als 4 UND j kleiner als 12 ist
        // ist eine der beiden Laufbedingungen nicht mehr erfüllt, bricht die Schleife ab
    }
    

    MfG



  • audacia schrieb:

    OldMan00 schrieb:

    Das fatale daran ist, daß der Compiler nicht meckert.

    Zumindest meiner mokiert sich über so etwas in einer Warnung.

    Ja das ist richtig, im Meldungsfenster gibt es einen Hinweis soweit diese Warungsoption aktiviert ist, aber das Programm wird gestartet ohne anzuhalten.
    Bei einer indirekten Zuweisung gibt es überhaupt keine Meldung.

    int x == 5; // Programm hält an.
    
    int x;
    x == 5; // Programm läuft, nicht mal ne Warnung.
    

    Ich wollte nur auf die Problematik hinweisen.



  • Das eine ist ja auch eine fehlerhafte Deklaration und das andere nur ein gültiger wenn auch sinnfreier Ausdruck.
    Somit ist ja auch alles Ok.



  • Ok vielen Dank!

    Ihr habt mir echt geholfen! Vll. komm ich nochmal auf das Thema zurück!

    lg, freakC++



  • Braunstein schrieb:

    Das eine ist ja auch eine fehlerhafte Deklaration und das andere nur ein gültiger wenn auch sinnfreier Ausdruck.
    Somit ist ja auch alles Ok.

    Ja klar, wie ich ja geschrieben habe, da ist die Problematik wenn man den Unterschied nicht weiß oder es falsch benutzt, warum auch immer. Mir ist klar warum der Compiler so reagiert :). Es ging lediglich ums Prinzip, daß der Compiler nicht immer stoppt auch wenn etwas falsch oder sinnlos ist.

    edit: ups zu spät 🙂


Anmelden zum Antworten