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?
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
Denk mal ein bisschen nach... While (i || r) bedeutet, weiterzulaufen, solange eine Variable nicht null ist...
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)
Du gibst bei einer while-Schleife allerdings die Laufbedingung und nicht die Abbruchbedingung an.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.