Erklärungen zu "!" vor strlen und strcmp

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich habe folgenden Code:
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,ROT,"Ihr eingegebenes Passwort ist zu kurz.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Bitte geben sie das gewünschte Passwort ein","Register","Abbrechen");
    return 1;
    }
    else
    {
    Register(playerid,inputtext);
    return 1;

    }
    hier ist ja ein "!" vor dem strlen.
    Was bewirkt dieses "!" genau.
    Und für mehr Verunsicherung sorgt dieser Code:
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),true))
    {
    LoadAccount(playerid);
    SendClientMessage(playerid,GRÜN,"Sie haben sich erfolgreich eingeloggt.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Das eingegebene Passwort ist falsch");
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login","Account gefunden. Bitte das Passwort eingeben","Login","Abbrechen");
    return 1;
    }
    Hier ist zuerst das, wann es richtig ist und erst nachher wenn es nicht ist.


    Bitte um genaue Erklärung des "!" vor diesen Befehlen.
    Und wo kann ich den Effekt dieser Befehle sehen. Wo ist beschrieben was für was ist?


    Danke für eure Hilfe

  • Mit if-Abfragen solltest du ja vertraut sein.
    Du bestimmt kannst abfragen, ob z.B. eine Variable einen bestimmten/größeren/kleineren Wert hat.

    if(a==123)
    if(a>123)
    if(a<123)


    Das ganze geht natürlich auch mit der 0.
    if(a==0)


    Das ganze kann man auch vereinfacht schreiben:
    if(!a)


    if(a==0)
    //und
    if(!a)
    sind also ein- und dieselbe Abfrage.


    Und auch Funktionen geben je nach erzieltem "Endergebnis" Werte zurück, die man abfragen kann, z.B. GetVehicleModel.
    if(GetVehicleModel(a)==556)


    Das ist auch bei strcmp der Fall: Stimmen die Strings überein, wird 0 returnt.
    Somit kommt das
    if(!strcmp...
    zustande.


    //edit:
    Bei deinem strlen-Beispiel dasselbe.
    if(!strlen(inputtext))

    fragt ab, ob der input-String 0 Zeichen lang ist.
    Man könnte also genauso gut
    if(strlen(inputtext)==0)
    schreiben.

  • danke maddin für deine Antwort.
    beim inputtext ist es logisch denn wenn da nix drinnen steht dann wird das und das ausgeführt.
    Aber geben solche "Strings" immer eine "0" aus wenn das so ist, was drinnen steht?
    Denn beim 2ten wird ja abgeprüft oder das übereinstimmt oder nicht und wenn ja wird eine 0 ausgegeben?
    also sind diese abfragen immer auf "==0" aus oder nicht immer?


    und wo bekomme ich die restlichen Erklärungen der restlichen Befehle die es für einen String gibt her?


    Danke

  • if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),true))
    //Ist eine andere Schreibweise für:
    if(strcmp(key,dini_Get(Spielerdatei,"Passwort"),true) == 1)
    // strcmp gibt den Wert 0 (false) zurück wenn die funktion erfüllt wird, beide strings sich gleichen
    //Da man wohl beim erstellen keine lust hatte == 0 dahinter zu schreiben hat man einfach ein ! davor gemacht
    //eine Funktion die direkt in eine if abfrage gebunden wird wird quasi als if(... == 1) oder true gewertet mit !
    //tauscht man diese Aussage in == 0 um



    Wiki Link zu strcmp: Klick
    //Edit, ach ich red blödsinn xD editiert :D
    //Edit

  • ob du


    <ausdruck>==0


    oder


    !<ausdruck>


    ist egal, das ist semantisch identisch.


    mit diesen operatoren überprüfst du ganz allgemein, ob ein ausdruck =0 ist. das kann eine einfache variable, eine Funktion (Rückgabewert!) etc. sein.


    /E: @ InternetInk
    falsch, strcmp gibt, wenn die strings sich gleichen, 0 zurück.

    Keine Scripting-Fragen per PM!

    2 Mal editiert, zuletzt von Crank93 ()


  • Ne,es gibt 0 bzw false zurück wenn die Strings identisch sind.

  • Fand ich immer so unlogisch, anstelle zu sagen strcmp (stringcompare) == true wenn erfolgreich, aber ne ist false ?! ... xD

    Es returnt ja keinen Bool sondern in der Tat nen Integer.
    Nämlich

    • < 0 wenn der 1. String kleiner als der 2. ist
    • 0 wenn der 1. String similar zum 2. ist
    • > 0 wenn der 1. String größer als der 2. ist

    Hat also durchaus logischen Hintergrund, wenn man ihn erstmal nur kennt... :D