Freiwilliger Parameter (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
  • Hallo leute,
    Ich stehe vor einem Problem mit der SSCANF funktion.
    Ich möchte für einen meiner CMD's einen Freiwilligen Paremter einfügen.
    Sprich einen Parameter der nicht zwingend ausgeführt werden muss.


    Ich habe den SSCANF-Thread im Englischen Forum schon durchgelesen aber nichts brauchbares gefunden.
    Hat jemand eine Idee, wie ich das angehen könnte?


    Bisher habe ich nur versucht, den Wert der Variable im Vorhinein zuzuweisen.

    Einmal editiert, zuletzt von Firerfan () aus folgendem Grund: Rechtschreibfehler in der Überschrift

  • Meinst du wenn du den Parameter nicht ausführst, wird ein Standardwert eingesetzt.

    Net bringt es auf den Punkt.
    Ja, genau so meine ich das.


    Ich bin gerade an nem CMD, bei dem man nicht immer den letzten Parameter benötigt.
    Deshalb sollte dieser (falls nicht ausgefüllt) einen Standartwert annimmt.

  • Meinst du so in etwa?

    new param1, param2;
    if(sscanf(params,"ud",param1,param2) != 0) {
    //beide Parameter werden verwendet
    return 1;
    }
    else if(!sscanf(params,"u",param1) != 0) {
    //nur ein Parameter wurde verwendet
    }


    Edit: mit strings geht das halt nur, wenn der string als letztes kommt. anders ist das garnicht umsetzbar. sobald du mehr als 1 parameter hast, kann ein string niemals der erste sein

  • Inwiefern sollen denn Parameter anders zugeordnet sein ??


    Die normale Abfrage mit sscanf bezüglich Params ist eine if-Abfrage und in der Folge verbunden mit einem String-Compare.
    Wieso sollte es nicht klappen, wenn ich Abfrage, ob die Länge 0 ist, sprich nichts eingegeben wurde?



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich mache das beispiel mal bei einem Give-CMD:


    /give [playerid] [Aktion (waffe, drogen)] [Menge]


    Wenn ich jetzt aber die Waffe übergeben möchte, soll der Parameter für die Länge nicht angegeben werden MÜSSEN.
    Für die Drogen brauch in den aber :)


    .net: funzt nicht :)



    FACE:
    Der Parameter-String sieht so aus:

    Code
    1 beispiel 1


    Nur weis ich ja nicht immer, wie lange beispiel in dem fall wäre.
    Wie soll ich dann strlen verwenden?
    Vorallem wenn die ID bis zu 3 stellen hat.


    Prototype:
    Glaube, du hast meine Frage nicht verstanden.

  • Wenn der zweite Parameter "waffe" ist, dann führst du einfach die Aktion aus.


    Alternativ kannst du auch per strfind nach den Spaces im String suchen.
    Ich verstehe zwar nun was du machen möchtest, doch sehe ich kein Problem hinter der Sache.



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Man kann es auch optional machen wenn man geschweifte klammern benutzt


    Beispiel:
    if(sscanf(parans,"ii{i}",bla,blal,blall)) return


    Bin mir zwar nicht 100% sicher weils lange her ist das ich gescriptet habe, aber ein versuch ist es wert.

  • Selbst wenn ich es gesehen hätte, scheint es nicht zu funktionieren.
    sscanf(params,"usD(1)",pID,aktion,menge)
    Muss die letzte stelle mit angeben, sonst bleibt er beim SSCANF hängen.
    Und ja, ich benutze das Plugin auf der neusten Version.


    Aber wie gesagt, habs hinbekommen, wenn auch ein bisschen anders^^
    Danke euch allen noch mal für eure Hilfe.

  • Liegt ja auch an deiner Parameterreihenfolge.
    Woher soll denn SSCANF wissen,dass der String ( s -> aktion) zu Ende ist und ein neuer für beginnt ( d -> menge ) ?
    Du müsstest es mit p<> dazu zwingen,bei jedem Leerzeichen den nächsten Parameter automatisch zu suchen.
    sscanf(params,"p< >usD(1)",pID,aktion,menge)
    So klappte es früher jedenfalls. Nach hunderten von Änderungen bei SSCANF ist es vllt nicht mehr so.