Provided by:
manpages-nl_20051127-1_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
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.