Forum: Mikrocontroller und Digitale Elektronik for schleife mit 2 Bedingungen


von Smith (Gast)


Lesenswert?

Hallo zusammen,

bei der nächsten Schleife:
1
for(i=0, j=0; i<DataSize, j<ArSize; j++, i++)
2
{
3
 ......
4
}

wird die erste Bedingung "i<DataSize" nicht ausgewertet, die Schleife 
wird abgebrochen nur bei j= ArSize.

Weiß jemand was ich da falsch mache?
(Compiler ist microchip C32)

von Jörg H. (idc-dragon)


Lesenswert?

Der Komma-Operator taugt nicht für Vergleiche, da müßtest du schon sowas 
wie
1
for(i=0, j=0; i<DataSize && j<ArSize; j++, i++)
schreiben.

von Rolf Magnus (Gast)


Lesenswert?

Smith schrieb:
> Hallo zusammen,
>
> bei der nächsten Schleife:
>
> for(i=0, j=0; i<DataSize, j<ArSize; j++, i++)
> {
>  ......
> }
>
>
> wird die erste Bedingung "i<DataSize" nicht ausgewertet, die Schleife
> wird abgebrochen nur bei j= ArSize.
>
> Weiß jemand was ich da falsch mache?

Du verwendest den Komma-Operator. Der evauliert beide Operanden und gibt 
dann den Wert des rechten zurück. Man kann in einer For-Schleife nicht 
mehrere Bedingungen eintragen. Man kann aber natürlich als Bedinung das 
Ergebnis einer UND-Verknüpfung verwenden:
1
for(i=0, j=0; i<DataSize && j<ArSize; j++, i++)

von Detlev T. (detlevt)


Lesenswert?

Du brauchst ein logisches UND (&&) statt des Kommaoperators (findet sich 
in jedem C-Lehrbuch). Dessen Wert ist tatsächlich nur der Wert des 
zweiten Ausdrucks, so ist es in C definiert.

PS: Mist, zu langsam :D

von Smith (Gast)


Lesenswert?

ok, vieeeeeeeeeeelen Dank

von Sam .. (sam1994)


Lesenswert?

Bei deiner SChleife ist i immer gleich j. Warum verwendest du nicht eine 
Variable?

von Jörg H. (idc-dragon)


Lesenswert?

Hier steht's genauer:
http://www.eskimo.com/~scs/cclass/int/sx4db.html

Das Ergebnis eines Komma-Operators ist der Wert des letzten Ausdrucks. 
Ist normalerweise irrelevant, weil man nur auf die Ausführung als solche 
Wert legt.
Du hast aber deine Bedingung auch damit formuliert.

von Jörg H. (idc-dragon)


Lesenswert?

Samuel K. schrieb:
> Bei deiner SChleife ist i immer gleich j. Warum verwendest du nicht eine
> Variable?

Auch eine gute Beobachtung.
Vielleicht manipuliert er aber i oder j noch innerhalb der Schleife, 
pfui.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.