c frage

Gast #24784
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?
Gast #24791
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren