scanf

SCANF(3)                 Linux Programmeurs Handleiding                 SCANF(3)



NAAM
       scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - geformateerde invoer
       conversie

SAMENVATTING
       #include <stdio.h>
       int scanf(const char *format, ...);
       int fscanf(FILE *stream, const char *format, ...);
       int sscanf(const char *str, const char *format, ...);

       #include <stdarg.h>
       int vscanf(const char *format, va_list ap);
       int vsscanf(const char *str, const char *format, va_list ap);
       int vfscanf(FILE *stream, const char *format, va_list ap);

BESCHRIJVING
       De functies in de scanf familie leest invoer volgens een format zoals
       onder beschreven. Dit format kan conversie specificaties bevatten; bij
       succes wordt het resultaat van de conversie opgeslagen onder het
       bijpassende pointer argument.  De scanf functie leest invoer van de
       standaard invoer stream stdin, fscanf leest invoer van de invoer stream
       pointer stream, en sscanf leest zijn invoer van de karakter string waar
       str naar wijst.

       De vfscanf functie lijkt op vfprintf(3), het leest invoer van de pointer
       stream, gebruik makend van een variabele lijst met pointer argumenten
       (zie stdarg(3)).  De vscanf functie leest een variabele argumenten lijst
       van de standaard invoer en de vsscanf functie leest het van een string;
       deze lijken op de vprintf en vsprintf functies, respectievelijk.

       Elk volgend pointer argument moet precies overeenkomen met elke volgende
       conversie specificatie (zie echter ook `onderdrukken' onder). Alle
       conversies starten met het % (procent teken) karakter. De format string
       mag ook andere karakters bevatten. Witte ruimte (zoals spaties,
       tabulaties, of nieuwe regels) in de format string, eten een willekeurige
       hoeveelheid witte ruimte weg in de input, inclusief geen witte ruimte. Al
       het andere in de format string moet overeenkomen met de invoer. Het
       (in)lezen stopt wanneer een invoer karakter niet met een format karakter
       overeenkomt. Het (in)lezen stopt ook wanneer een invoer conversie niet
       gemaakt kan worden (zie onder).

CONVERSIES
       Op het % karakter dat een conversie introduceerd kunnen een aantal flag
       karakters volgen, als volgt:

       *      Onderdrukt toewijzing. De conversie die volgt wordt afgehandeld,
              maar geen pointer wordt verbruikt; het resultaat van de conversie
              wordt genegeerd.

       a      (glibc) Geeft aan dat de conversie s wordt gebruikt, de vereiste
              geheugen ruimte voor de string wordt aangevraagd via malloc, en de
              pointer er naar toe wordt toegekend aan de char pointer variabele.
              Deze pointer hoeft niet van te voren geinitialiseerd te worden.
              Deze vlag bestaat niet in ANSI C (C89) en heeft een andere
              betekenis in C99.

       a      (C99) Gelijk aan f.

       h      Geeft aan dat de conversie een van dioux of n zal zijn, en dat de
              volgende pointer een pointer naar een short int (in plaats van een
              int) zal zijn.

       l      Geeft aan dat ofwel de conversie een van dioux of n en de volgende
              pointer een pointer naar een long int (in plaats van een int) zal
              zijn, ofwel dat de conversie een van efg en de volgende pointer
              een pointer naar een double (in plaats van een float) zal zijn.
              Het geven van twee l vlaggen is gelijk aan de L vlag.

       L      Geeft aan dat ofwel de conversie een van efg en de volgende
              pointer een pointer naar een long double zal zijn, of dat de
              conversie dioux en de volgende pointer een pointer naar een long
              long zal zijn.  (Merk op dat een long long geen ANSI C type is.
              Een programma dat dit gebruikt zal niet portable zijn naar alle
              architecturen.)

       q      gelijk aan L.  Deze vlag bestaat niet in ANSI C.

       Bovenop deze vlaggen kan er een optionele maximum veld breedte, gegeven
       als een decimale integer, gegeven worden tussen de % en de conversie. Als
       geen breedte wordt gegeven, wordt `oneindig' gebruikt (met een
       uitzondering, zie onder); anders worden ten hoogste zoveel karakters
       ingelezen bij het verwerken van de conversie. Voordat de conversie
       begint, moet de conversie meestal witte ruimte overslaan; deze witte
       ruimte wordt niet geteld als veld breedte.

       The volgende conversies zijn voorhanden:

       %      Herkent een letterlijke `%'. Dit betekend: `%%' in de format
              string herkent een enkel `%' karakter in de invoer. Geen conversie
              wordt uitgevoerd, en geen toewijzing aan een pointer vindt plaats.

       d      Herkent een decimale integer met eventueel plus of min teken; de
              volgende pointer moet een pointer naar een int zijn.

       D      Gelijk aan ld; deze conversie bestaat uitsluitend voor backward
              compatibility.  (Merk op: alleen in libc4. In libc5 en glibc wordt
              de %D in stilte genegeerd, waardoor oudere programma's op
              mysterieuze wijze de mist in gaan.)

       i      Herkent een integer, eventueel met teken; de volgende pointer moet
              een pointer naar een int zijn.  De integer wordt gelezen in een
              radix 16 (hexadecimaal) als het begint met `0x' of `0X', in radix
              8 als het begint met `0' (octaal), en anders in radix 10
              (decimaal). Alleen karakters die corresponderen met de radix
              worden gebruikt.

       o      Herkent een octale integer zonder teken; de volgende pointer moet
              een pointer naar een unsigned int zijn.

       u      Herkent een decimale integer zonder teken; de volgende pointer
              moet een pointer naar een unsigned int zijn.

       x      Herkent een hexadecimale integer zonder teken; de volgende pointer
              moet een pointer naar een unsigned int zijn.

       X      Gelijk aan x.

       f      Herkent een drijvende komma getal met eventueel teken; de volgende
              pointer moet een pointer naar een float zijn.

       e      Gelijk aan f.

       g      Gelijk aan f.

       E      Gelijk aan f.

       s      Herkent een serie niet-witte-ruimte karakters; de volgende pointer
              moet een pointer naar een char zijn, en het array moet groot
              genoeg zijn om de hele serie karakters plus het NUL karakter op
              het einde te accepteren. De invoer string stopt als de invoer
              witte ruimte geeft, of als de maximum veld breedte wordt bereikt;
              welke van deze twee het eerst komt.

       c      Herkent een aantal van breedte karakters (default 1); de volgende
              pointer moet een pointer naar een char zijn, en er moet genoeg
              ruimte zijn voor alle karakters (er wordt geen NUL karakter op het
              einde toegevoegd). Het normale negeren van inleidende witte ruimte
              wordt onderdrukt. Om witte ruimte te negeren, gebruik expliciet
              witte ruimte in de format string.

       [      Herkent een niet lege serie karakters uit de gegeven set te
              accepteren karakters; de volgende pointer moet een pointer naar
              een char zijn, en er moet genoeg ruimte voor alle karakters in de
              string zijn, plus een NUL karakter. Het normale negeren van
              inleidende witte ruimte wordt onderdrukt. De string moet gaan
              bestaan uit karakters in (of niet in) een bepaalde set; de set
              wordt gedefinieerd door de karakters tussen het open rechte haak [
              karakter en het sluitende rechte haak ] karakter. De set is
              exclusief die karakters als het eerste karakter na de open rechte
              haak een dakje ^ is.  Maak om een sluitende rechte haak in de set
              toe te voegen, een sluitende rechte haak het eerste karakter na de
              open rechte haak of het dakje; iedere andere positie zal de set
              sluiten. Het streepje karakter - is ook speciaal; wanneer geplaats
              tussen twee andere karakters, zal het alle tussenliggende
              karakters toevoegen aan de set. Om een streepje zelf toe te
              voegen, maak het het laatste karakter voor de sluitende rechte
              haak. Bijvoorbeeld, `[^]0-9-]' betekend de set `alles behalve de
              sluitende rechte haak, de nummers nul tot negen, en het streepje'.
              De string eindigt met het verschijnen van een karakter dat niet in
              (of, met het dakje, in) de set vertegenwoordigt is, of als de veld
              breedte verzadigt is.

       p      Herkent een pointer waarde (zoals geprint door `%p' in printf(3);
              de volgende pointer moet een pointer naar void zijn.

       n      Niets wordt verwacht; inplaats hiervan wordt het aantal karakters
              tot nog toe verzwolgen uit de invoer opgeslagen in de volgende
              pointer, deze pointer moet een pointer naar int zijn.  Dit is geen
              conversie, alhoewel het kan worden onderdrukt met de * vlag.  De C
              standaard zegt: `Uitvoeren van een %n opdracht verhoogt het aantal
              toeschrijvingen dat de functie na uitvoering terug geeft niet'
              maar het "Corrigendum" lijkt dit te weerspreken. Waarschijnlijk is
              het verstandig om geen aannames aan te nemen over het effect van
              de %n conversie op de terug geef waarde.


TERUG GEEF WAARDE
       Deze functies geven het aantal toegekende invoer items terug, dit kan
       minder zijn dan waarin voorzien was, of zelfs nul, als een herkenning
       mislukte.  Nul geeft weer dat, alhoewel er invoer voorhanden was, geen
       conversies toegekend werden; normaal gesproken is de oorzaak een foutief
       invoer karakter, zoals een alfabetisch karakter voor een `%d' conversie.
       De waarde EOF wordt teruggegeven als een invoer fout plaatsvond voordat
       een conversie plaatsvond, zoals het bereiken van end-of-file.  Als een
       fout of end-of-file plaatsvond nadat conversie was begonnen, dan wordt
       het aantal succesvolle conversies terug gegeven.

ZIE OOK
       getc(3), printf(3), strtod(3), strtol(3), strtoul(3)

VOLDOET AAN
       De functies fscanf, scanf, en sscanf voldoen aan ANSI X3.159-1989 (``ANSI
       C'').

       De q vlag is de BSD 4.4 notatie voor long long, terwijl ll of het gebruik
       van L een integer conversie is in de GNU notatie.

       De Linux versies van deze functies zijn gebaseerd op de GNU libio
       bibliotheek. Bekijk de info documentatie van GNU libc (glibc-1.08) eens
       voor een kortere omschrijving.

BUGS
       Alle functies voldoen volledig aan ANSI X3.159-1989, maar bieden de extra
       vlaggen q en a als ook een extra gedrag voor de L en l vlaggen. Deze
       laatste mag als een bug beschouwd worden, omdat het de gedragingen van
       vlaggen gedefinieerd in ANSI X3.159-1989 verandert.

       Sommige combinaties van vlaggen gedefinieerd door ANSI C zijn niet zinnig
       in ANSI C (bijv.  %Ld).  Terwijl ze een goed gedefinieerd gedrag hebben
       op Linux, hoeft dit niet zo te zijn op andere architecturen. Daarom is
       het normaal gesproken beter om vlaggen te gebruiken die helemaal niet
       door ANSI C worden gedefinieerd, dat wil zeggen: gebruik q in plaats van
       L in combinatie met diouxX conversies, of ll.

       Het gebruik van q is niet hetzelfde als op BSD 4.4, omdat het gebruikt
       kan worden in float conversies equivalent aan L.



LINUX MANPAGE                      1995-11-01                           SCANF(3)