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.
Kann immer noch nicht Alter überprüfen
- KingFr3ak
- Geschlossen
- Erledigt
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
-
-
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 stimmtWenn du es im Dialog nutzt, dann mach es so:
if(ReturnInputDate(inputtext))..... -
Verstehe nicht ganz, kannst du das bisschen ausführlicher erklären bitte?
-
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 wiedergebenHier
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 stimmtSoweit verstanden?
//edit hab noch nen Fehler gefunden
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;
} -
Ja, habe es einigermaßen verstanden und wie macht man diesen ReturnInputDate nochmal, also was schreibt man in die Klammer hinein, z.B. ReturnInputDate("irgendwas"), ich hoffe du verstehst was ich meine
-
ReturnInputDate("irgendwas")
statt Irgendwas einfach ein Datum?if(ReturnInputDate("1.1.1992")){print("Date Stimmt");} else{print("Date Stimmt nicht");}
-
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;
} -
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;
}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 Zahlenformatif( 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
}
} -
-
breadfish.de
Hat das Thema geschlossen.