Ich bin auf folgenden Code gestoßen und zebreche mir ein wenig über
eine Zeile den Kopf. Hier erst einmal der Rahmen des Programms:
[LIST=1]
[*] int _tmain()
[*] {
[*] int x,y;
[*] do
[*] {
[*] cout <<"x: ";
[*] cin >> x;
[*] cout << "y: ";
[*] cin >> y;
[*]}
[*] while ((x%2 == 0) || (y%2 == 0));
[*] for (Anweisung 1)
[*] {
[*] for( Anweisung 2)
[*] {
[*] if(Bedingung 1 || Bedingung 2)
[*] Anweisung;
[*] else
[*] Anweisung;
[*] }
[*] cout << endl;
[*] }
[*] return 0;
[*]}
[/LIST]
Alles anzeigen
Was das Programm eigentlich macht, ist an dieser Stelle nicht relevant, ich
habe trotzdem den Rest hinzugefügt damit die Verschachtlungen deutlich
werden. Eigentlich geht es mir nur um die Zeile 11:
Meines Erachtens müsste er bei dem Befehl
prüfen, ob die Eingegebene Zahl x gerade ist, er teilt x durch 2
und vergleicht (==) den Rest (%) mit 0. Bsp.: Nehmen wir für x=4.
4/2=0
0==0 -> true
Oder x=5:
5/2=2 Rest 1
1==0 -> false
Das gleiche gilt in der 2 Bedingung auch für die Variable y. Nun haben wir
noch den logischen "Oder" Operator (||). Dieser sagt doch nur aus, dass
EINE der beiden Bedingungen erfüllt sein muss um die while Anweisung
auszuführen.
So, und jetzt einmal wie das ganze in der Praxis bei mir läuft. Ich gebe x=2
und y=5 ein. Das Programm fährt aber nicht mit den anderen Schleifen
fort, sondern wiederholt den Eingabebefehl. Also fragt er mich solange
nach x und y bis ich zwei ungerade Zahlen eingegeben habe. Daraus
ergeben sich 2 Fragen für mich:
1. Warum führt er die weiteren Anweisungen erst durch wenn beide
Bedingungen NICHT zutreffen?
2. Und vorallem, warum müssen beide nicht zutreffen wenn doch das
"Oder" die Bedingungen vernüpft?