break und continue



  • Hallo,
    vielen Dank für die super ausführliche Erklärung. Ich hatte tatsächlich die Bedeutung von break und continue falsch verstanden! Nun ist es aber klar!

    Eine Frage bleibt aber noch, die jedoch nichts mit dem eigentlichen Thema zu tun hat. Kannst du mir sagen, was dein default machen würde. Ich habe nämlich die Wel der Pointer leider nich nicht vollständig durchblickt und verstehe diese Zeile noch nicht! (wird sich aber ändern 😃 😃 :D)

    Vielen Dank für eure Hilfe
    lg freakC++

    PS. Wie kann ich denn dann mein Programm an einer beliebigen Stelle stoppen??

    PPS: Ich sehe gerade, dass es sich glaub ich um gar keinen Pointer handelt. Ich glaube ich habes es verstanden^^



  • freakC++ schrieb:

    Eine Frage bleibt aber noch, die jedoch nichts mit dem eigentlichen Thema zu tun hat. Kannst du mir sagen, was dein default machen würde.

    Default in einem Switch ist soetwas wie else{} in einer Schleife



  • halloei schrieb:

    Default in einem Switch ist soetwas wie else{} in einer Schleife

    Ich glaub es war mehr der Ausdruck

    array[i] *= array[i];
    

    der ihn verwirrt hat.

    Dieser steht eigentlich für nichts anderes wie

    array[i] = array[i] * array[i];
    

    demnach ist der * Operator hier nur für eine Multiplikation verwendet, hat also nichts mit Pointern zu tun.



  • Huch, ist schon spät 😃



  • ja, das habe ich im Nachhinein auch gemerkt, aber wie halloei schion gesagt hat....es war schon spät!!

    Nun ja, ich habe mich noch mal umgeschaut, aber ich habe leider im großen Internet keine antwort auf mein "ps" gefunden. Daher bin ich nochmals auf euch angewiesen.

    Vielen Dank
    lg, freakC++



  • Hallo,
    ich muss nochmal eine Frage stellen, die sich auf den Beitrag von JustSomeCode bezieht. Er hat folgenden Quelltext gepostet, den
    ich jedoch noch ein bisschen erweitert habe:

    int i= 0;
    
     while(i < 10){
       if(++i % 2 == 0) continue;
       ShowMessage(i);
       }
    

    Ich habe mal den Quelltext aufgefröselt: i startet in der If- Bedingung mit 1. Somit ergibt sich folgende Liste:
    1 --> Rest nicht 0 -> ShowMessage
    2 --> Abbruch
    3 --> Rest nicht 0 -> ShowMessage
    4 --> Abbruch
    5 --> Rest nicht 0 -> ShowMessage
    6 --> Abbruch
    7 --> Rest nicht 0 -> ShowMessage
    8 --> Abbruch
    9 --> Rest nicht 0 -> ShowMessage
    10 --> Abbruch

    Es werden also alle ungeraden Zahlen gezeigt. Das ist soweit auch alles logisch und verständlich. Nun habe ich aber den Quelltext
    ein bisschen geändert

    int i= 0;
    
     while(i < 10){
       if(i++ % 2 == 0) continue; //das inkrement steht nun hinter i
       ShowMessage(i);
       }
    

    Nun startet i mit 0. Somit ergab sich für mich folgende Liste:
    0 --> Abbruch
    1 --> Rest nicht 0 -> ShowMessage
    2 --> Abbruch
    3 --> Rest nicht 0 -> ShowMessage
    4 --> Abbruch
    5 --> Rest nicht 0 -> ShowMessage
    6 --> Abbruch
    7 --> Rest nicht 0 -> ShowMessage
    8 --> Abbruch
    9 --> Rest nicht 0 -> ShowMessage
    10 --> Abbruch

    Diese Liste stimmt aber nicht. Es werden nun nämlich alle geraden Zahlen gezeigt. Ich verstehe nicht warum. Wenn eine gerade
    Zahl gezeigt wird, bedeutet es doch, dass die if Bedingung nich wahr war (sonst wäre continue ausgelöst worden)!!! Die
    if-Bedingung muss aber wahr gewesen sein, da ein rest ungleich 0 ensteht wenn ich eine ungerade Zahl durch 2 teile!!

    Wo liegt mein Denkfehler???

    Vielen Dank für eure Hilfe
    lg, freakC++



  • Nunja genau das ist eben der Effekt des Postinkrements. 😉

    int i = 1;
    if(i++ == 1){ // Dieser Vergleich ergibt true, da zur Auswertungszeit i noch gleich 1 ist
       printf("%d", i); // Dennoch wird hier 2 ausgegeben, nicht 1, da nach Auswertung des Ausdrucks i inkrementiert wurde
    }
    

    Das Postinkrement (i++) sorgt dafür, dass erst NACH Auswertung des Ausdrucks inkrementiert wird.

    Das Präinkrement (++i) hingegen inkrementiert sofort, also schon VOR Auswertung des Ausdrucks.

    Wenn du also trotz Postinkrement alle ungeraden Zahlen ausgeben willst, müsstest du immer i-1 ausgeben.

    int i = 0;
    
    while(i < 10){
       if(i++ % 2 == 0) continue; // Erst vergleichen, dann inkrementieren
       ShowMessage(i-1); // i ist jetzt um 1 höher als es zum Zeitpunkt des Vergleichs war, deshalb zur Ausgabe 1 subtrahieren
    }
    


  • Hi,
    danke!! Nun habe ich es endlich kapiert. Man hätte es natürlich auch so schreiben können:

    while(i < 10){
       if(++i % 2 != 0) continue; 
       ShowMessage(i);
       }
    

    Die letzte Frage: Wie breche ich mein Programm an beliebiger Stelle ab?

    Vielen Dnak
    lg, freakC++



  • Du kannst innerhalb von Funktionen jederzeit returnen, selbst wenn es void Funktionen sind.

    void doSomething()
    {
       int i = 1;
    
       // Etwas machen...
    
       if(i == 1)
          return; // Wenn i dann immernoch 1 ist, Funktion abbrechen; Da die Funktion vom Typ void ist wird kein Wert returned, sondern return steht alleine
    
       // Ansonsten ganz normal weitermachen...
    }
    

    Wenn du dein Programm beenden willst, brauchst du eigentlich nur in deiner main() Funktion returnen.

    int main()
    {
       int i = 1;
    
       // Wieder etwas machen...
    
       if(i == 1)
          return 1; // Wenn i dann immernoch 1 ist, Programm beenden; Hier in diesem Beispiel mit dem Fehler code 1
    
       // Anderenfalls ganz normal weiter machen
    
       return 0; // Hier wäre dann das normale Programmende; da alles gut gegangen ist returnen wir 0
    }
    


  • freakC++ schrieb:

    Die letzte Frage: Wie breche ich mein Programm an beliebiger Stelle ab?

    Hallo freakC++,

    beantwortet der letzte Beitrag von JustSomeCode Deine Frage?
    Ich hatte bei Deinem Anfangspost den Eindruck, als ob Du beim Eintreffen eines Ereignisses an dieser Programmstelle unterbrechen und zu einer anderen Stelle im Programm springen willst, oder habe ich Dich da missverstanden?

    Sonst poste doch mal ggf. Deinen Code und sag, was an welcher Stelle passieren soll.


Anmelden zum Antworten