mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik for schleife mit 2 Bedingungen


Autor: Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?
(Compiler ist microchip C32)

Autor: Jörg H. (idc-dragon)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
for(i=0, j=0; i<DataSize && j<ArSize; j++, i++)

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vieeeeeeeeeeelen Dank

Autor: Sam .. (sam1994)
Datum:

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

Autor: Jörg H. (idc-dragon)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg H. (idc-dragon)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.