Fehler beim abfragen des inputtextes (IsLetter)

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
  • Hey,
    undzwar habe ich ein kleines Problem, ich versuche bzw. der inputtext SOLL und DARF nur BUCHSTABEN enthalten.
    Desshalb habe ich mir den stock IsLetter aus der SAMP Wiki geholt ^^.
    Nur funktioniert des NICHT!


    Das ist im Dialog

    format(string,sizeof(string),""COLW"Bitte gebe hier den neuen Rangnamen für den 1. Rang ein!\n"COLO"Aktueller Name:"COLW"\n%s\n"COLR"Info:"COLW"\nDer Rangname darf nicht länger als 24 Zeichen lang sein und darf keine Sonderzeichen enthalten!",FraktionInfo[fraktion][pRangname1]);
    if(!strlen(inputtext))return ShowPlayerDialog(playerid, DG_FRAKTION_EDIT_RANG1, DG_INPUT,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Weiter","Zurück");
    if(strlen(inputtext) > 24 || IsLetter(strlen(inputtext),false))return ShowPlayerDialog(playerid, DG_FRAKTION_EDIT_RANG1, DG_INPUT,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Weiter","Zurück");
    FraktionInfo[fraktion][pRangname1]= strlen(inputtext);
    format(string,sizeof(string),""COLW"Du hast den Rangnamen für den 1. Rang erfolgreich in %s geändert!",FraktionInfo[fraktion][pRangname1]);
    ShowPlayerDialog(playerid, DG_INFO, DG_MSGBOX,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Schließen","");

    Und das der Stock Letter


    stock IsLetter(const input, bool:capitalOnly = false, bool:lowerCaseOnly = false)
    {
    if (capitalOnly)
    return (input >= 'A' && input <= 'Z');
    else if (lowerCaseOnly)
    return (input >= 'a' && input <= 'z');
    else return (input >= 'a' && input <= 'z' || input >= 'A' && input <= 'Z');
    }


    Hoffe jemand kann mir helfen :S

  • Ganz einfach :)
    if(strlen(inputtext) > 24 || IsLetter(strlen(inputtext),false)) // Falsch, da nur eine der beiden Bedingungen zutreffen muss
    if(strlen(inputtext) > 24 && IsLetter(strlen(inputtext),false)) // So wäre es richtig, denn beides muss true sein
    Das dürfte dein Problem beheben, viel Spaß beim weiterscripten ;)

    Professioneller Webentwickler.

  • Danke aber naja ^^,wenn ich den Rang ändern will in hier z.B. "RangTest" dann kommt das Wort raus "|ang1_frak3"


    Hier nochmals der verbesserte Code ^^.


    format(string,sizeof(string),""COLW"Bitte gebe hier den neuen Rangnamen für den 1. Rang ein!\n"COLO"Aktueller Name:"COLW"\n%s\n"COLR"Info:"COLW"\nDer Rangname darf nicht länger als 24 Zeichen lang sein und darf keine Sonderzeichen enthalten!",FraktionInfo[fraktion][pRangname1]);
    if(!strlen(inputtext))return ShowPlayerDialog(playerid, DG_FRAKTION_EDIT_RANG1, DG_INPUT,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Weiter","Zurück");
    if(strlen(inputtext) > 24 && IsLetter(strlen(inputtext),false))return ShowPlayerDialog(playerid, DG_FRAKTION_EDIT_RANG1, DG_INPUT,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Weiter","Zurück");
    FraktionInfo[fraktion][pRangname1]= strlen(inputtext);
    format(string,sizeof(string),""COLW"Du hast den Rangnamen für den 1. Rang erfolgreich in %s geändert!",FraktionInfo[fraktion][pRangname1]);
    ShowPlayerDialog(playerid, DG_INFO, DG_MSGBOX,""COLB"Fraktionseinstellungen"COLW"- "COLO"Rangnamen",string,"Schließen","");


    ? ^^

  • Oh, du hast da überhaupt noch mehr Fehler drin.


    1. IsLetter-Aufruf
    Die IsLetter-Funktion überprüft jedes einzelne Zeichen. Das heißt, du musst eine Schleife laufen lassen, die jedes Zeichen des Strings einzeln überprüft.
    Abgesehen davon darfst du IsLetter() nicht mit dem Parameter "strlen(inputtext)" aufrufen, sondern direkt mit inputtext. Du willst ja nicht die Länge sondern die Buchstaben überprüfen.


    2. pRangname1
    Ich nehme an, die Variable ist ein String. Warum setzt du sie dann auf strlen(inputtext)? strlen() ist eine Funktion, die die Anzahl der Zeichen zurückgibt. Du kannst die Variable also einfach auf inputtext setzen. Vergiss das mit strlen ;)

    Professioneller Webentwickler.