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.