Kann immer noch nicht Alter überprüfen

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
  • Guten Tag liebe Community,


    ich weiß selber, dass ich einen ähnlichen Post erstellt habe, doch ich komme hier nicht weiter. Ich bitte schon mal um Verständnis. Also ich möchte bei einem Dialog überprüfen, wie Alt der Spieler ist und der Spieler gibt dabei seinen Geburtsdatum in diesem Format: 00.00.0000, doch irgendwie kriege ich das nicht hin. Ich habe schon viele Post's angeschaut, doch immer wieder komme ich nicht weiter. Also es wäre schön, wenn ihr es nicht von einem LoH / SoL / RGR oder wo auch immer kopieren könntet, sondern einfach erklären und einen Beispiel geben, nicht diese fiesen Copy & Paste sachen, weil ich das ja auch lernen möchte.
    Ich hoffe ihr habt Verständnis und hilft mir.

  • Habe für dich mal eine Funktion erstellt


    stock ReturnInputDate(inputtext[])
    {
    new bool:zahl=false,Punkts=0;
    for(new i=0; i<strlen(inputtext); i++)
    {
    switch(inputtext[i])
    {
    case '0','1','2','3','4','5','6','7','8','9':{zahl=true;}
    case '.':{Punkts++;}
    default:{return 0;}
    }
    }
    if((!zahl) || (Punkts != 2))return 0;
    return 1;
    }


    Die Anwendung geht so:
    if(ReturnInputDate("1.1.1992")){print("Date Stimmt");}
    else{print("Date Stimmt nicht");}
    Das ergebnis stimmt und spricht den Vorgaben
    if(ReturnInputDate("a.1.1992")){print("Date Stimmt");}
    else{print("Date Stimmt nicht");}
    Hier sagt er das das ergebnis nicht stimmt


    Wenn du es im Dialog nutzt, dann mach es so:
    if(ReturnInputDate(inputtext)).....

    All in all it's just another brick in the wall

  • Also ich mach eine SChleife durch die Eingabe mit der Zeile
    for(new i=0; i<strlen(inputtext); i++)
    Danach gehe ich durch alle Buchstaben mit
    switch(inputtext[i])
    Ich frage ab ob es Zahlen sind
    case '0','1','2','3','4','5','6','7','8','9':{zahl=true;}
    Dann setzt ich ein Bool wert auf True da welche vorhanden sind
    case '.':{Punkts++;}
    Hier lasse ich die Punkte zählen
    default:{return 0;}
    Wurde ein anderes Zeichen gefunden wird alles abgebrochen und 0 wiedergeben


    Hier
    if((!zahl) || (Punkts != 2) || (strlen(inputtext) > 10))return 0;
    Frage ich ab ob keine Zahlen oder keine 2 Punkte vorhanden sind oder ob mehr als 10 Zeichen vorhanden sind
    Ist das der Fall so wird 0 wiedergeben ansonsten mit den return 1 am ende eine 1 wiedergeben, da alles stimmt


    Soweit verstanden?


    //edit hab noch nen Fehler gefunden :D
    stock ReturnInputDate(inputtext[])
    {
    new bool:zahl=false,Punkts=0;
    for(new i=0; i<strlen(inputtext); i++)
    {
    switch(inputtext[i])
    {
    case '0','1','2','3','4','5','6','7','8','9':{zahl=true;}
    case '.':{Punkts++;}
    default:{return 0;}
    }
    }
    if((!zahl) || (Punkts != 2) || (strlen(inputtext) > 10))return 0;
    return 1;
    }

    All in all it's just another brick in the wall


  • statt Irgendwas einfach ein Datum?


    Nur bringt deine FUnktion so gut wie nix du kannst auch ..1 eingeben


    Ich hab mir mal die freiheit genommen das neu zu schreiben bei dem code wird geprüft ob das Datum dem genannten Format entspricht
    00.00.0000
    daher wird sowas auch als fehler erkannt
    1.1.1992
    so jedoch nicht
    01.01.1992

    stock ReturnInputDate(inputtext[])
    {
    if(!inputtext[0])return 0;
    for(new i, j= strlen(inputtext); i != j; ++i)if(inputtext[i] != '.' && (0 > inputtext[i] > 0x39))return 0;
    if(inputtext[2] =='.' && inputtext[5] =='.')return 1;
    return 0;
    }

    Einmal editiert, zuletzt von IPrototypeI ()

  • Danke und wie überprüfe ich das? Also ich weiß auch nicht wie man das macht, habe so etwas noch nie ausprobiert also Kommas überprüfen etc. hoffe, dass du mir helfen kannst oder auch andere User auf diesem Forum

  • Danke und wie überprüfe ich das? Also ich weiß auch nicht wie man das macht, habe so etwas noch nie ausprobiert also Kommas überprüfen etc. hoffe, dass du mir helfen kannst oder auch andere User auf diesem Forum



    Die Funktion kannst du in einer if-Abfrage verwenden.
    Beispiel:
    if(!ReturnInputDate(string))return SendClientMessage(playerid,-1,"Deine Eingabe entspricht nicht dem Format: 00.00.0000!");


    Wie du siehst gibt es hier ein Argument mit dem namen inputtext[] welches ein 1dimensionales Array ist
    stock ReturnInputDate(inputtext[])


    bedeutet das du für das Argument einen string einsetzt. ( string = 1 Dimensionales Array)
    Beispiel für ein string.


    new text[10];


    Was passiert in der Funktion ?
    es wird als erstes überprüft ob der string leer ist
    if(!inputtext[0])return 0;
    sollte das so sein so gibt die funktion 0 zurück und auch bei der nächsten überprüfung ob hier nur Zahlen von 0 - 9 und punkte verwendet wurden wird 0 zurück gegeben
    wenn es der Bedingung nicht entspricht.
    Zuletzt wird noch geprüft ob die Punkte auch am richtigen Platz sind und nur dann wird 1 zurück gegeben.


    Wiederholtes Verwendungsbeispiel:
    new txt[10] = "10.01.1992";
    if(!ReturnInputDate(txt))return SendClientMessage(playerid,-1,"Deine Eingabe entspricht nicht dem Format: 00.00.0000!");
    return SendClientMessage(playerid,-1,"Deine Eingabe war richtig!");


    da nun die Funktion 1 zurück gibt und in der if-Abfrage überprüft wird ob der wert alles außer 1 ist wird die Nachricht "Deine Eingabe war richtig!"
    an den Spieler über SendClientMessage geschickt.

  • Das geht mit sscanf auch viel einfacher. Ist sowieso Bestandteil von sehr vielen Scripten, bei dir bestimmt auch.


    new tag,monat,jahr;
    if(sscanf(input,"p.ddd",tag,monat,jahr)) { // sscanf v1
    // if(sscanf(input,"p<.>ddd",tag,monat,jahr)) { // sscanf v2,v3
    // Ungültiges Zahlenformat
    }
    else {
    // Gültiges Zahlenformat


    if( tag <= 0 || tag > 31 || monat <= 0 || monat > 12 || jahr < 1900 ) ) {
    // Zahlen die ungültiges sind. Vor 1900 sollte sowieso keine Geboren sein,der SA:MP spielt :p
    }
    }