Forum: PC-Programmierung logischer fehler bei c++--> weshalb


von jumper (Gast)


Lesenswert?

1
int main()
2
{
3
  // testet auf Minimum dreier Ganzzahlen:
4
  int n1, n2, n3;
5
  cout << "Bitte geben Sie drei Ganzzahlen ein ";
6
  cin >> n1 >> n2 >> n3;  // z.B. 0 0 1
7
  
8
  if (n1 >= n2 >= n3)  //Ganzzahlen abgebildet!
9
    cout << "max = " << n1;  // 
10
11
12
  return 0;
13
}


Eingabe 0
        0
        1
Ausgabe: max=0

Weshalb 0 und nicht 1 ????



Laut Vorlesung trifft folgendes zu!:""Boolesche Ausdrücke besitzen 
numerische Werte
(FALSE -> 0, TRUE -> 1).
Die Auswertung zusammengesetzter Ausdrücke kann daher "verzwickt" 
sein."" Aber weshalb? Hab hier ja kein bool definiert sondern int!

von Peter (Gast)


Lesenswert?

>if (  n1 >= n2 >= n3 )

n1 >= n2 ist ein bool, dann machst du mit >= n3 weiter.


mach es doch einfach lesbarer.

if (  n1 >= n2  && n2 >= n3 )

von der mechatroniker (Gast)


Lesenswert?

für n1 = 0 und n2 = 0 ist n1 >= n2 wahr, also 1. Ist n3 jetzt ebenfalls 
1, wird 1 >= 1 abgefragt, und das Ergebnis ist wahr. Also wird die cout 
<< ...-Zeile ausgeführt.

von P. S. (Gast)


Lesenswert?

jumper schrieb:

>   if (n1 >= n2 >= n3)  //Ganzzahlen abgebildet!

C und seine Derivate tun hier nicht, was du glaubst. Hier wird ein 
Vergleichsoperator ausgewertet und dann das Resultat fuer den naechsten 
verwendet. Das sollte eigentlich aus deinen Unterlagen hervorgehen.

von jumper (Gast)


Lesenswert?

Ok jetzt ist es klar! danke!

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
Noch kein Account? Hier anmelden.