C For Schleife

darkknoppix

Ensign
Registriert
Dez. 2007
Beiträge
135
Ist es möglich in einer for Schleife zwei oder mehrere Initialisierungswerte, mehrere Bedingungen und Reinitialisierungswerte anzugeben? Und wenn ja wie ist dann der Syntax dazu?
Mfg Darkknoppix
 
hier stand mal was falsches, siehe weitere Postings
 
Zuletzt bearbeitet:
Falls du C++ verwendest kannst du das mit dem Komma Operator machen:

Code:
for (int k = 0, j = 10; k <= 10; ++k, --j)
    cout << j << " " << k << endl;
 
ist das einfach nur eine Einschränkung von C? Hab selbst bisher nur mal mit C++ gearbeitet (lange her) - die meiste Zeit jedoch hänge ich in Java rum.



unter Java geht folgendes z.B.:

Code:
	for (int i = 0, j = 20; i<j;i++,j--){
			System.out.println(i+", "+j);
		}
 
hmm shame on me...bezieht sich das auch auf den bedingungsblock?also 2 gleichzeitig prüfen?
nu muss ich doch mal das C buch rauskramen zum nachgucken

ok, also C Buch sagt auch das Anweisungen mit Komma getrennt werden können, Bedingung jedoch nicht...meine Fehler, Schnellschuß ohne nachgucken...
 
Zuletzt bearbeitet:
bei der Bedingung würde es auch überhaupt keinen Sinn ergeben, sie durch Komma abzutrennen - wenn dann mit logischem UND oder ODER verknüpfen ;)
 
Bedingungen kannst du ja einfach z.B. mit && verknüpfen...
/edit: zu lahm
 
Hm wenn man die Bedingungen ja mit logischem && und die Anweisungen mit Komma trennen kann, ist doch gut mehr will ich ja nicht.
Danke nochmal
Mfg Darkknoppix
 
1.) Wie soll das bitte gehen, dass da zwei Bedingungen gleichzeitig ausgewertet werden? Wird dann zufällig einmal die und einmal die ausgewertet? Je nachdem, ob beide oder nur eine wahr sein müssen, kannst du && (UND) bzw || (ODER) verwenden.

2.) Kann es sein, dass du eigentlich zwei Schleifen haben willst, die nur den selben Körper haben. In diesem Fall würde ich den Code lieber in eine Funktion auslagern.

3.) Das mit dem Komma bei den Anweisungen ist zwar in C++ möglich (ob es im alten C Standard auch erlaubt war, weiß ich leider nicht), machen sollte man es jedoch nicht, da hier der Sinn der for-Schleife nicht mehr wirklich da ist. Wenn du zwei Statements bei jedem Durchlauf hast, dann häng sie ans Ende der Schleife, wenn du eine weitere Variable initialisieren willst, dann mach dies vor der Schleife. Alles andere hat in einer for-Schleife nichts verloren. Die sollte immer folgendes Format haben:

for(int i=0;i<maximum;i++)
{
Statements....
}

Auch manchmal sinnvoll ist i=maximum-1, i>=0, oder dass man sie an einem gewissen Wert starten lässt (z.B. von 3 bis 5)
Ganz selten passiert es, dass man z.B. 2er Schritte machen muss.
Je nach Bedarf kann man auch int auch einen Unsigned Integer machen, wenn man etwas mehr Performance haben will (aber dann bitte nicht auf >=0 vergleichen) oder man nimmt einen 64Bit Integer, wenn man ein File durchliest (obwohl das tut man auch nie Byteweise und mehr als 4GB RAM hat man noch nicht durchgehend.

Alle anderen Verunstaltungen sollte nicht in einer for-Schleife gelöst werden.
 
Ich komme zwar aus der Java Welt, daher mal ganz naiv gefragt: Welchen Sinn soll das haben?

Selbst wenn man so etwas braucht, lässt sich das doch über eine Laufvariable realisieren:
for(int i = 0; i< x; i++){
y+=1;
...
}

Also wofür dasselbe in der Schleifendfinition?
Und falls man dies als Abbruchbedingung nutzen will, gibts doch breake und eine einfach e Bedingung.

Konfus sei!
 
Mit der Begründung könnte man for Schleifen auch gleich komplett durch while(true) Endlosschleifen mit breaks für die Abbruchbedingung ersetzen ;)
 
Jap könnte man.

Die for-Schleife ist eh nur eine komfortable Version der while-Schleife.

Analog wäre das hier vorgeschlagene for-Konstrukt eine komfortable Version dessen, was ich als Alternative vorgeschlagen habe.
 
Zurück
Oben