If Abfrage liefert falsches Ergebnis

  • Hmm irgendwie versteh ich nicht warum hier ein True rauskommt. Meine Funktion liefert per return die Werte -2,-1,0 oder wenn keine Fehler auftreten einen String. Die Abfrage funktionier scheinbar nur wenn man == benutzt, aber warum?
    Wenn ich einen integer mit einem string vergleiche sollte doch wohl eher ein False herauskommen.

    [autoit]


    $error = "Ich bin ein String und ganz sicher keine Null."
    if $error = 0 Then
    MsgBox(0,"True",$error & " = 0 ???")
    Else
    MsgBox(0,"False","So sollte es sein")
    EndIf

    [/autoit]

    Edit:
    Dieses Ergebnis erhält man komischerweise nur bei der Zahl 0. Fragt man eine x beliebige Zahl ab erhält man False.

    2 Mal editiert, zuletzt von misterspeed (10. März 2011 um 13:18)

  • Hallo misterspeed,

    das Ergebnis des Vergleichs ist schon korrekt, gerade da der String keine Zahl darstellt wird er als 0 interpretiert. Wenn du deine Abfrage korrekt also so:

    [autoit]

    if $error = "0" Then
    MsgBox(0,"True",$error & " = 0 ???")
    Else
    MsgBox(0,"False","So sollte es sein")
    EndIf

    [/autoit]

    schreibst kommen auch die vo dir erwarteten Ergebnisse. Du kannst auch einmal dieses kleine Skript laufen lassen:

    [autoit]

    $error = "Ich bin ein String und ganz sicher keine Null."

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,$error,Int($error)& ", denkste!")

    [/autoit]

    mfg autoBert

  • Ok das erklärts wohl. Der String wird also intern zum int konvertiert vorm vergleich und das ergibt immer 0. Dann reservier ich die " = 0 " Abfrage mal für die string Rückgabe und benutze negative int Werte für die Fehler, dann sollte sowas ja nicht mehr passieren.