Seite 1 von 1
Continue Fehler im Tutorial?
Verfasst: Fr Sep 20, 2013 2:17 pm
von vrcmr
Auf dieser Seite
http://www.proggen.org/doku.php?id=c:tutorial:loops
wird folgendes geschrieben:
Wir haben nun einen Wächter, der - wenn die Zahl nicht durch zwei teilbar ist - den Befehl continue aufruft. continue unterbricht die Abarbeitung der Schleife, das nachfolgende printf( „Dieser Wert ist durch zwei teilbar“ ) wird also nicht mehr erreicht. Stattdessen wird die Schleife direkt am Kopf fortgesetzt 1).
Wenn ich es aber praktisch mache dann geschieht folgendes:
Wir haben nun einen Wächter, der - wenn die Zahl durch zwei teilbar ist - den Befehl continue aufruft. continue unterbricht die Abarbeitung der Schleife nicht, das nachfolgende printf( „Dieser Wert ist durch zwei teilbar“ ) wird also erreicht und abarbeitet.
Die Logik ist folgende:
Code: Alles auswählen
if(true)
continue;
// weiterverarbeiten
if(false)
continue;
// springe zum Kopf der Schleife und beachte die nachfolgenden Code-Zeilen nicht.
Ist das richtig?
Re: Continue Fehler im Tutorial?
Verfasst: Fr Sep 20, 2013 3:08 pm
von Xin
vrcmr hat geschrieben:Auf dieser Seite
http://www.proggen.org/doku.php?id=c:tutorial:loops
wird folgendes geschrieben:
Wir haben nun einen Wächter, der - wenn die Zahl nicht durch zwei teilbar ist - den Befehl continue aufruft. continue unterbricht die Abarbeitung der Schleife, das nachfolgende printf( „Dieser Wert ist durch zwei teilbar“ ) wird also nicht mehr erreicht. Stattdessen wird die Schleife direkt am Kopf fortgesetzt 1).
Wenn ich es aber praktisch mache dann geschieht folgendes:
Wir haben nun einen Wächter, der - wenn die Zahl durch zwei teilbar ist - den Befehl continue aufruft. continue unterbricht die Abarbeitung der Schleife nicht, das nachfolgende printf( „Dieser Wert ist durch zwei teilbar“ ) wird also erreicht und abarbeitet.
wert % 2 ist true, wenn bei der Division durch 2 ein Rest bleibt - dann ist die Zahl durch zwei nicht glatt teilbar. Wenn wert % 2 also
nicht durch 2 teilbar ist, springt er an den Anfang der for-Schleife. Alles nachfolgende - hinter dem Wächter - wird entsprechend nicht mehr aufgerufen.
vrcmr hat geschrieben:
Die Logik ist folgende:
Code: Alles auswählen
if(true)
continue;
// weiterverarbeiten
if(false)
continue;
// springe zum Kopf der Schleife und beachte die nachfolgenden Code-Zeilen nicht.
Ist das richtig?
Die Logik verstehe ich nicht ^^
continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.
Re: Continue Fehler im Tutorial?
Verfasst: So Sep 22, 2013 5:18 pm
von sebix
Xin hat geschrieben:continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.
Egal wie die Bedingung lautet?
Aber das hier gibt ja auch nur 0 aus, und nicht nur eins, also wird die Bedingung überprüft?
Code: Alles auswählen
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 1) {
printf("%d\n", i);
i++;
continue;
}
return 0;
}
Re: Continue Fehler im Tutorial?
Verfasst: So Sep 22, 2013 5:22 pm
von cloidnerux
Aber das hier gibt ja auch nur 0 aus, und nicht nur eins, also wird die Bedingung überprüft?
Continue wird im Code-Fluss wie eine normale Funktion aufgerufen.
Sobald du in deinem Code-Fluss auf ein Continue stößt, wird der Computer zurück zum Sschleifenkopf springen. In deinem Beispiel ist es natürlich absurd. Du weist den Computer als letzten Befehl einer Schleife an, wieder zurück zum Schleifenkopf zu springen, was er ja so oder so machen würde. Daher ist dein continue unnötig. Es wird zudem nur 0 ausgegeben, da nach dem ersten durchlauf i = 1 ist und damit die Bedingung nicht mehr erfüllt.
Re: Continue Fehler im Tutorial?
Verfasst: Mo Sep 23, 2013 9:51 am
von Xin
sebix hat geschrieben:Xin hat geschrieben:continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.
Egal wie die Bedingung lautet?
continue ist nur ein Schlüsselwort - das in dem Moment, in dem es gerufen wird, an den Anfang der Schleife zurück springt.
Steht vor Continue ein if-Statement, so wird natürlich gesprungen, wenn das if-Statement "true" ergibt. Es besteht also kein Zusammenhang zwischen der Funktion von continue und der Bedingung, die davor steht.
sebix hat geschrieben:
Aber das hier gibt ja auch nur 0 aus, und nicht nur eins, also wird die Bedingung überprüft?
Code: Alles auswählen
#include <stdio.h>
int main(void) {
int i = 0;
while (i < 1) {
printf("%d\n", i);
i++;
continue;
}
return 0;
}
Die Bedingung wird immer überprüft, im zweiten Fall (i==1) ist die Bedingung lediglich nicht 'true'.
continue steht am Ende jeder Schleife automatisch (sonst wäre es keine Schleife, wenn nicht an den Startpunkt der Schleife zurückspringen würdest). Das continue macht nichts anderes als an den Schleifenkopf zurück zu springen.
Wenn davor eine Bedingung ist (if( ... ) continue) dann regelt das if nur, ob das continue jetzt ausgeführt wird oder ob der Quelltext in der Schleife weiter bearbeitet wird. Man kann so einen
Wächter innerhalb einer Schleife implementieren.
Re: Continue Fehler im Tutorial?
Verfasst: Mo Sep 23, 2013 8:30 pm
von sebix
Nun, ich weiß schon was continue macht, und das if vor dem continue auch. Aber ich würde continue eher beschreibe als, "Springe zum Schleifenkopf" / "gehe zum nächsten durchlauf" / "brich den durchlauf ab und mach sonst wie gewohnt weiter".
Xin hat geschrieben:continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.
Was bedeutet in diesem Zusammenhang aber nun "egal wie die Bedingung davor aussieht". Bzw. welche Bedingung ist hier gemeint, ich dachte hier an die Schleifenbedingung, aber das macht ja keinen Sinn, weil sie ja eben schon geprüft wird.
Re: Continue Fehler im Tutorial?
Verfasst: Mo Sep 23, 2013 9:41 pm
von Xin
sebix hat geschrieben:Nun, ich weiß schon was continue macht, und das if vor dem continue auch. Aber ich würde continue eher beschreibe als, "Springe zum Schleifenkopf" / "gehe zum nächsten durchlauf" / "brich den durchlauf ab und mach sonst wie gewohnt weiter".
Ich hoffe, dass es auch in der Bedeutung beschrieben ist. ^^
sebix hat geschrieben:Xin hat geschrieben:continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.
Was bedeutet in diesem Zusammenhang aber nun "egal wie die Bedingung davor aussieht". Bzw. welche Bedingung ist hier gemeint, ich dachte hier an die Schleifenbedingung, aber das macht ja keinen Sinn, weil sie ja eben schon geprüft wird.
Du hast die Frage nicht gestellt, ergo zielt meine Antwort auf die Frage des Fragestellers:
Xin hat geschrieben:vrcmr hat geschrieben:
Die Logik ist folgende:
Code: Alles auswählen
if(true)
continue;
// weiterverarbeiten
if(false)
continue;
// springe zum Kopf der Schleife und beachte die nachfolgenden Code-Zeilen nicht.
Ist das richtig?
Die Logik verstehe ich nicht ^^
continue bedeutet grundsätzlich "Setze die Schleife fort", egal wie die Bedingung davor aussieht.