Frage bezüglich sscanf ?

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
  • Abend,


    Ich habe mal eine kleine Frage.
    und zwar möchte ich bei meinem Befehl 2 Parameter übergeben also, kleines beispiel:


    /editbiz [BIZID] [Name/Preis] [Angabe]



    ich weiß so gesehen sind es jetzt 3 Parameter, aber ich Rede von den 2 Parametern (Name/Preis und Angabe)
    Mit Angabe ist gemeint, den Preis oder den Name angeben.
    Also wenn man jetzt /editbiz BIZID NAME kleiner-Test // Würde das business jetzt "kleiner-Test" heißen.
    Nur wie mache ich es bei Preis? da soll ja kein Name angegeben werden, sondern eine Zahl?
    Mein sieht jetzt so aus:


    Code



    ocmd:editbiz(playerid, params[])
    {
    if(PlayerDaten[playerid][pTutorial] == 1)return SendClientMessage(playerid,ORANGE," Du bist noch im Tutorial!");
    if(PlayerDaten[playerid][pLogin] == 0)return SendClientMessage(playerid,ORANGE ," Du bist nicht Eingeloggt!");
    if(PlayerDaten[playerid][pAdminlevel] != 2000)return SendClientMessage(playerid,DUNKELROT," Du hast kein Zugriff auf diesen Befehl!");
    new BizIDWahl, ExistsBiz[84];
    if(sscanf(params,"is[12]", BizIDWahl, )) return SendClientMessage(playerid,DUNKELROT," Benutzung: /editbiz [ID] [Name/Preis] [Angabe]"); // Was müsse ich den beim 3 Parameter dann angeben? es wäre ja ein String & Zahl?
    {
    format(ExistsBiz,sizeof(ExistsBiz),"/Firmen/%i.ini", BizIDWahl);
    if(dini_Exists(ExistsBiz))
    {
    if(strcmp(cmd,"Name",true) == 0)
    {
    // Hier ist noch alles Leer.
    }
    if(strcmp(cmd,"Preis",true) == 0)
    {
    // Hier ist noch alles Leer.
    }
    }
    }
    return 1;
    }



    Hoffe ihr habt mich so verstanden ^^

  • Den dritten Parameter als String auslesen lassen, und beim Preis-Teil mit IsNumeric prüfen.
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }


    if(!IsNumeric(angabe)) return ...
    else preis = strval(angabe);

  • Müsste so passen:
    ocmd:editbiz(playerid, params[])
    {
    if(PlayerDaten[playerid][pTutorial] == 1)return SendClientMessage(playerid,ORANGE," Du bist noch im Tutorial!");
    if(PlayerDaten[playerid][pLogin] == 0)return SendClientMessage(playerid,ORANGE ," Du bist nicht Eingeloggt!");
    if(PlayerDaten[playerid][pAdminlevel] != 2000)return SendClientMessage(playerid,DUNKELROT," Du hast kein Zugriff auf diesen Befehl!");
    new BizIDWahl, ExistsBiz[84], cmd[12], angabe[32];
    if(sscanf(params,"is[12]s[32]", BizIDWahl, cmd, angabe)) return SendClientMessage(playerid,DUNKELROT," Benutzung: /editbiz [ID] [Name/Preis] [Angabe]");
    format(ExistsBiz,sizeof(ExistsBiz),"/Firmen/%i.ini", BizIDWahl);
    if(dini_Exists(ExistsBiz))
    {
    if(strcmp(cmd,"Name",true) == 0)
    {
    // Hier ist noch alles Leer.
    }
    if(strcmp(cmd,"Preis",true) == 0)
    {
    if(!IsNumeric(angabe)) return SendClientMessage(playerid,DUNKELROT,"Ein Preis besteht nicht aus Buchstaben!");
    new preis = strval(angabe);
    }
    }
    return 1;
    }