SYNOPSIS
        int sscanf(string str, string fmt, mixed var1, mixed var2, ...)

BESCHREIBUNG
        Wertet einen String <str> unter Beruecksichtigung des Formats
        <fmt>. <fmt> kann Strings beinhalten, die durch %d und %s getrennt
        werden. Jedes %d und %s entspricht einer der Variablen <var1>,
        <var2> etc.

        Die Operatoren im Format-String <fmt> haben eines der folgenden
        Formate:

            %[+][!|~][<size>[.<minmatch>]]<type>

        <type> kann folgendes sein:
            d: meldet eine Zahl
            D: meldet eine Zahl
            U:
            s: meldet eine Zeichenkette
            %: meldet das %-Zeichen
            t: meldet Whitespaces (also Leerschlaege und Tabulatoren),
               speichert diese aber nicht.

        <size> ist die erwartete Feldgroesse, <minmatch> die verlangte
        minimale Laenge fuer einen Treffer (Standardwerte sind 0 fuer
        Strings und 1 fuer Nummern). Sowohl <size> als auch <minmatch> kann
        entweder numerisch oder mit '*' angegeben werden - im zweiten Fall
        wird die gueltige Variable in der Liste der Argumente benutzt.

        Wird + angegeben, muessen die Zeichen nach dem Feld ebenfalls
        matchen. Ist dies nicht der Fall, wird das Feld als Misserfolg
        betrachted (auch wenn der Wert bereits an die zugehoerige Variable
        zugewiesen wurde).

        Wird ! angegeben, wird zwar die Suche durchgefuehrt, aber Treffer
        werden weder gespeichert noch gezaehlt. Mit ~ als Argument wird
        zwar die Suche durchgefuehrt und die Treffer gezaehlt, das Resultat
        wird aber nicht gespeichert.

        Wenn %s nicht am Ende von <fmt> steht, wird nur ein Treffer
        registriert, wenn auch der nachfolgende String bzw. das
        nachfolgende Format gefunden wird. Weiter unten gibt es dazu
        ein Beispiel.

        Der Unterschied zwischen %d und %D %U ist, dass letzteres ein
        unmittelbar vorausgehendes %s so bald als moeglich abbricht,
        waehrend ersteres zuerst versucht, einen moeglichst grossen Treffer
        fuer %s zu erzielen. Trotzdem ueberspringt %D/%U keine Whitespaces,
        dazu muss %.0t%D gesetzt werden.

        Wenn eine Zahl erkannt wird, welche ausserhalb des Zahlenbereiches
        von Integers ist, so wird dies nicht als Treffer betrachtet.

        Zurueck gegeben wird die Anzahl Treffer.

        Die Funktion sscanf() ist insofern ein Spezialfall, als dass
        Argumente automatisch nach Referenz uebergeben werden.

BEISPIELE
        string who, what;
            if (sscanf("wirf frisbee zu rex",
                "wirf %s zu %s", what, who) != 2)
                write("Usage: Wirf <what> zu <who>\n");
            else
                write("Du wirfst einen "+what+" zu "+who+" um auf dich "
                    "aufmerksam zu machen.\n");

        sscanf("ab", "%s%s", who, what)
            ==> liefert 2, who = "", what = "ab"

        sscanf("ab", "%s %s", who, what)
            ==> liefert 0, who = 0, what = 0

        sscanf("ab ", "%s %s", who, what)
            ==> liefert 2, who = "ab", what = ""

GESCHICHTE
        LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein.

SIEHE AUCH
        explode(E), regexp(E)
