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.

        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)
