c frage

Gast #24784
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 #24785
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
Gast #24787
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)
Gast #24789
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.
Gast #24790
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
Gast #24791
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.