mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c frage


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo mir ist gerade was kurioses passiert und zwar.
ich wollte while schleife generieren deren mit zwei abbruchbedingnung. 
die abbruchbedingung wäre jeweils 0.

also hab ich das ganze mal so eingeben:

unsigned char i,r;
i=14;
r=16;
while (i || r)
{
   i--;
   r--;
}
die schleife sollte normal abgebrochen werden wenn i o ist.
ja puste kuchen der läuft einfach weiter.
dann hab ich das ganze so eingeben:

unsigned char i,r;
i=14;
r=16;
while (i && r)
{
   i--;
   r--;
}

und siehe da es geht. aber was soll das mit der UND verknupfung? i ist 
immer als erstes 0. kann mir das jemand erklären?

Autor: Uwe Arends (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine erste Schleife wird nur beendet, wenn i UND r NULL sind, da du 
von unterschiedlichen Werten ausgehend beide immer um eins 
dekrementierst, werden beide NIE gleichzeitig NULL.

Die zweite Schleife bricht ab, wenn die UND-Verknüpfung NULL ergibt. Das 
ist immer dann der Fall, wenn i ODER r NULL sind.

hth
-uwe

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denk mal ein bisschen nach...

While (i || r) bedeutet, weiterzulaufen, solange eine Variable nicht 
null ist...

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für mich trotzdem kurios da ich das "||" nur als ODER kenne.

d.h while (i || r)  laufe solange bis i ODER r gleich 0 ist

in einer IF schleife heisst das ja auch

if ( i = 0 || r = 0)

Autor: Sascha Weitkunat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du gibst bei einer while-Schleife allerdings die Laufbedingung und nicht 
die Abbruchbedingung an.

Autor: Uwe Arends (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eie ODER-Verknüpfung ergibt solange 1 oder true oder NICHTNULL wie der 
eine ODER der ander Operand nicht null ist.

Eine Verknüpfung die NULL ergibt, wenn der eine ODER der andere Operand 
null ist, ist die UND-Verknüpfung.

Autor: BAB (Kai K.) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so einfach wie sascha das sagt ist es genau kurz und schmerzlos richtig. 
nach deinen überlegungen gehst du nämlich von einer abbruchbedingung aus 
und so funktioniert die while schleife nicht.

gruss,
BAB

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja aber hallo, da muss ich mich doch auch mal einklinken und ein paar 
Bemerkungen zum allgemeinen Verständis beitragen.

Wenn du eine Ganzzahlige Variable hast, und diese Variable in einer 
Bedingung ohne einen Operatoren angibts so bedeutet das gleichviel wie 
'Wert der Variablen ungleich 0', da der C-Compiler dies als Boolsche 
Operation auffasst. Dies ist generell so. Die Zeile
while (i || r)
ist also gleichbedeutend wie
while (i != 0 || r != 0)

Dann noch etwas zu folgender Zeile:
if ( i = 0 || r = 0)

Hier kommt garantiert nicht das heraus was du wolltest. Es wird nämlich 
der Wert 0 an die beiden Variablen i und r zugewiesen [i = 0 bzw. r = 0] 
und nun wird abgekürzt folgende Bedingung getestet:
if (0 || 0)
und diese if-Abfrage wird immer(!) FALSE ergeben.
Das was du eigentlich wolltest war:
if (i == 0 || r == 0)
Dies kann übrigens auch so notiert werden:
if (!i || !r)


Vielleicht wär ja auch mein Tutorial mal was für dich.
Guckst du zuerst hier: www.mypage.bluewin.ch/ch_schifferle/C-Kurs.zip
und dann hier: www.mypage.bluewin.ch/ch_schifferle/Atmel.zip

oder du liest den zweiten Teil des Tutorials hier unter 'Artikel'.

Gruss
Christian

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.