Einfache Frage zum Vergleich von Variablen

  • Hi zusammen,

    ich stehe gerade auf dem Schlauch.

    Könnte mir bitte jemand sagen, warum der folgende Code "ungleich" ausgibt?

    Und wie muss ich das bitte umsetzen, wenn ich nur die Variablen untereinander (ohne 'Werte') vergleichen möchte?

    Besten Dank

    tobius


    Global $a = 'a'
    Global $b = 'a'
    Global $c = 'a'

    If $a == $b == $c Then
    MsgBox(0,0,'gleich')
    Else
    MsgBox(0,0,'ungleich')
    EndIf

  • Weil der Vergleich der ersten beiden Variablen (deren Wert ist jeweils "a") True ergibt. Dann erfolgt der Vergleich mit der dritten Variablen (deren Wert auch "a" ist). Und das gibt False. Denn True ist ungleich "a".

  • Es gibt einen Unterschied zwischen == und = , siehe z.B. Operatoren

    AutoIt
    Global $a = 'a', $b = 'a', $c = 'a'
    If $a = $b = $c Then
        ConsoleWrite('====> GLEICH' & @CRLF)
    Else
        ConsoleWrite('====> UNGLEICH' & @CRLF)
    EndIf

    Hier ergibt $a = $b True. $c  ist ebenfalls True (wie jeder "nicht-leere String").

    EDIT tobius : Sorry, aber das o.a. Beispiel ist natürlich Blödsinn :Face: .

    Danach wäre auch Global $a = 'a', $b = 'a', $c = 'c' ==> GLEICH, da $c bei jedem nicht-leeren String True ergibt.

    tobius :

    Besser wäre wohl :

    AutoIt
    Global $a = 'a', $b = 'a', $c = 'a'
    If ($a == $b) And ($a == $c) And ($b == $c) Then
        ConsoleWrite('====> GLEICH' & @CRLF)
    Else
        ConsoleWrite('====> UNGLEICH' & @CRLF)
    EndIf

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    3 Mal editiert, zuletzt von Musashi (11. Januar 2022 um 20:48) aus folgendem Grund: offenbar persönliche Anzeichen von Long-COVID

  • Muss leider nochmal nachhaken, da ich nicht auf die Lösung komme, wie ich die Strings der Variablen vergleichen kann.

    Angenommen ich kenne den Inhalt von $a - $e nicht, wie kann ich bitte prüfen, ob die Strings exakt übereinstimmen?

    Das Ergebnis des Codes unten ist 'gleich' ($e ist unterschiedlich). Ich verstehe nun zwar warum aber wie löse ich das bitte?

    Danke vorab.

    Code
    Global $a = 'a', $b = 'a', $c = 'a', $d = 'a', $e = 'bbb'
    
    If $a = $b = $c = $d = $e Then
        MsgBox(0,0,'gleich')
    Else
        MsgBox(0,0,'ungleich')
    EndIf
  • Use

    Code
    Global $a = 'a', $b = 'a', $c = 'a', $d = 'a', $e = 'a'
    
    If $a = $b And $b = $c And $c = $d And $d = $e Then
        MsgBox(0,0,'gleich')
    Else
        MsgBox(0,0,'ungleich')
    EndIf
  • Nur noch als Anmerkung:

    Wenn du viele Werte vergleichen willst macht es evtl. Sinn ein Array zu verwenden.

    Dann musst du nur alle Werte ins Array schreiben und das könnte einiges an Code ersparen.

  • Dann stellt sich natürlich noch die Frage, welches Problem mit diesem Code gelöst werden soll und ob es nicht eine "elegantere" Lösung für dieses Problem gibt :)

  • Hast wohl gedacht, das merkt hier eh keiner... 8o

    Das war wieder so ein Klassiker. In der Werbepause kurz ins Forum geschaut und eine schnelle Antwort 'rausgehauen ^^ . Den 'schlimmeren' Fehler habe ich, *.* sein Dank, ja noch selbst gemerkt.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."