Blöde Frage: Zweiter Parameter der for-Schleife
-
Hi
I schäme mich sehr, denn ich programmiere jetzt seit so vielen Jahren in C++ und all die Jahre scheine ich da was falsch verstanden zu haben
Ich hab vorher folgendes getan:
for (int i=0; i<4, i<64; i++)
{
....
//bei i = 60 Stürzte es ab
}Und mein Code ist (komischerweise nur in bestimmten Fällen) abgestürzt.
Ich dachte immer, ich könnte in den zweiten Parameter mehrere Bedingungen reinpacken und solange ALLE erfüllt sind, wird die Schleife ausgeführt.
Nun hab ich den Code durch
var = min (4,64);
for (int i=0; i<var; i++)
{
...
}ersetzt und schon funktioniert alles.
Kann es sein, dass die Schleife solange ausgeführt wird, wie MINDESTENS eine Bedingung wahr ist??? Fände ich sehr unpraktisch. Außerdem will ich gar nicht daran denken, wo ich das alles falsch eingesetzt haben könnte...
Wollte nur mal ne Bestätigung dafür haben, hab all meine C++ Bücher verliehen und alle Tuts, die ich in Google gefunden habe, verschweigen einfach, dass man sowas überhaupt tun kann.
Tschö,
Jan.
-
&& statt ,
-
var = min (4,64); weist var den Wert 4 zu, da er der kleinere Wert ist.
Ansonsten siehe devil.
-
Der Komma-Operator wertet seine Operanden der Reihe nach aus (von links nach rechts) und gibt den Wert des am weitesten rechts stehenden Operanden zurück. Die Werte aller anderen Operanden werden verworfen.
i < 4, i < 64 hat also den gleichen Effekt wie i < 64, die Bedingungn werden in keinster Weise verknüpft.
Man benutzt den , Operator also nur dann, wenn die Operanden, deren Ergebnisse verworfen werden, Seiteneffekte haben. Beispielsweise sieht man sowas recht häufig:
for (i=5, j=20; ....)
-
Ja ich würde auch sagen einfach mit && (und) verknüpfen....
-
Hmmm,
also meiner Meinung nach ist hier ne while besser. Ich finde eine for- Schleife mit 2 Abbruchbedingungen sehr unpraktisch (habe ich auch noch nie programmiert). Als Abbruchbedingung gibts da nen schönes Wort das heisst break, zusätzlich kannst du auch noch continue benutzen, um mit dem nächsten Schleifendurchgang anzufangen, aber den aktuellen abzubrechen. Wenn du lieber eine for-schleife hast, würde ich zumindest eine Bedingung in ne Abfrage packen. Das ist meiner Ansicht nach auch viel besser zu lesen.
Beispiel:
while (i >= 64) { // hier i irgendwie berechnen if (i >= 4) break; }
Anmerkung: Mir ist allerdings noch nicht so ganz klar, was du zu welchem zweck machen willst, von daher könnte der Code auch unpassend sein. Da müsstest du uns verraten, was du beabsichtigst.