Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.12.2011, 20:12

[Erledigt] CountDown - Lösung verwirrend

Hallöchen alle zusammen!



Ich hänge gerade beim Countdown. Ich war leider nicht ganz in der Lage, den Countdown selbstständig zu schreiben, wenngleich die Rahmenbedingungen problemlos festzulegen waren - ich habe jetzt mal die Lösung angesehen und muss sagen, dass mich Zeile 22 verwirrt. Wie soll ich diese Deuten?



22: if (CountdownStart%2 == false)



Dass hier ein Modulo verwendet wird, ist ersichtlich, aber ich verstehe nicht, was mit %2 <--- gemeint ist. Durch 2 teilbar? Dann ergibt das False für mich aber keinen Sinn. Oder bedeutet das grob übersetzt "Wenn der Countdown nicht durch 2 teilbar ist..."?



Ich danke im Voraus.



MfG



KILLTHIS

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KILLTHIS« (21.12.2011, 20:41) aus folgendem Grund: Problem gelöst!


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

21.12.2011, 20:23

Willkommen im Forum.

Bei Modulo wird der Rest aus der Division zurückgegeben:
0%2=0
1%2=1
2%2=0
3%2=1
4%2=0

anderes Beispiel:

0%3=0
1%3=1
2%3=2
3%3=0
4%3=1

usw.

Da in C++ false durch die 0 dargestellt wird(und true durch alles was ungleich Null ist aber meistens 1) entspricht der Vergleich "x == false" einem "x == 0" und ist wahr wenn x Null ist.
Hier würde man normalerweise auch "CountdownStart%2 == 0" oder "!(CountdownStart%2)" schreiben.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

21.12.2011, 20:31

Dass hier ein Modulo verwendet wird, ist ersichtlich, aber ich verstehe nicht, was mit %2 <--- gemeint ist. Durch 2 teilbar? Dann ergibt das False für mich aber keinen Sinn. Oder bedeutet das grob übersetzt "Wenn der Countdown nicht durch 2 teilbar ist..."?

Ja, das ergibt auch so keinen Sinn. Der Rückgabewert einer Modulooperation ist ein Integer, 'false' ist aber ein boolean. Du solltest eigentlich auch eine Warnung wegen eines impliziten Typecasts bekommen.

Bei false ist es noch realtiv harmlos, wichtig wird sowas erst bei 'true'. Denn das ist nur ein Wert der wahr ist, aber noch lange nicht jeder wahre wert. Soll heißen:

C-/C++-Quelltext

1
2
3
4
int * ptr;
if(ptr) //wenn der zeiger ungleich 0 ist
...
if(true==ptr) //wenn der zeiger gleich true ist - wir er vermutlich nie sein.

Ich bin mir gerade nicht ganz sicher, was der Standard genau darüber sagt, aber sowas hat damals mal für einen echt schwer zu findenden Fehler gesorgt. Also 'true' und 'false' nicht einfach so in Abfragen einbauen, sondern am besten nur für Zuweisungen an booleans verwenden.
Lieber dumm fragen, als dumm bleiben!

4

21.12.2011, 20:41

Danke euch beiden!

@Nachoman: Danke, das ist sehr gut ausgedrückt, jetzt habe ich auch die Rechnung dahinter verstanden - so ergibt das Gebilde jetzt auch richtig Sinn für mich.

MfG

KILLTHIS

Werbeanzeige