Provided by: manpages-nl_20051127-4_all
 

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  bij‐
        passende  pointer argument.  De scanf functie leest invoer van de stan‐
        daard 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 vol‐
        gende 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  conver‐
               sie 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 vari‐
               abele. 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  vol‐
               gende  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 uit‐
        zondering,  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 conver‐
               sie 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 vol‐
               gende 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 karak‐
               ter  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 vol‐
               gende pointer moet een pointer naar een char zijn,  en  er  moet
               genoeg ruimte zijn voor alle karakters (er wordt geen NUL karak‐
               ter 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  spe‐
               ciaal;  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  karak‐
               ters  tot nog toe verzwolgen uit de invoer opgeslagen in de vol‐
               gende 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  ver‐
               hoogt  het  aantal  toeschrijvingen dat de functie na uitvoering
               terug geeft niet’ maar het  "Corrigendum"  lijkt  dit  te  weer‐
               spreken.  Waarschijnlijk  is het verstandig om geen aannames aan
               te nemen over het effect van de %n conversie op  de  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.
        getc(3), printf(3), strtod(3), strtol(3), strtoul(3)
        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  bib‐
        liotheek.  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 zin‐
        nig 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 hele‐
        maal 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.