quarta-feira, 12 de dezembro de 2012

fscanf

funkcio

fscanf

<cstdio>
  int fscanf (DOSIERO * rivereto, const char * formato, ...); 
Legu formatan datumoj de rivereto
Legas datumojn de la rivereto kaj stokas ilin laŭ la parametro formato en la lokoj montris per la aldona argumentoj.

La pliaj argumentoj devus celi jam asignitaj celoj de la tipo specifita de lia responda formato specifier ene de la formato kordoj.

Parametroj

rivereto
Pointer al DOSIERO objekto kiu identigas la fluo de eniro por legi datumojn de.
formato
C ŝnuro kiu enhavas vico de karakteroj kiuj kontrolo kiel signoj ĉerpitaj de la rojo estas traktitaj:
  • Spaceto karaktero: la funkcio legos kaj ignori ajna spaceto gravuloj renkontis antaŭ la proksima ne-spaceto karaktero (spaceto karakteroj inkluzivas spacoj, lino kaj langeto karakterojn - vidu isspace ). Sola spaceto en la formato string validigas ajna kvanto de spaceto gravuloj ĉerpitaj de la rojo (inkluzive neniu).
  • Ne-spaceto karaktero, krom formato specifier (%): Ajna signo ke ankaŭ ne estas spaceto karaktero (blanka, lino aŭ langeto) aŭ parto de formato specifier (kiu komenci kun% karaktero) kaŭzas la funkcio por legi la venonta signo el la rivereto, kompari ĝin al tiu ne-spaceto karaktero kaj se ĝi koincidas, ĝi estas forĵetita kaj la funkcio daŭrigas kun la venonta signo de formato. Se la karaktero ne kongruas, la funkcio maltrafas, revenante kaj lasante posta karakteroj de la rivereto nelegitaj.
  • Formato specifiers: Vico formita de komenca procento signo (%) indikas formaton specifier, kiu estas uzita al precizigi la tipon kaj formato de la datumoj estas konsultita de la rojo kaj stokitaj en la lokoj montris per la aldona argumentoj.

Al formato specifier por fscanf sekvas ĉi prototipo:

% [*] [Larĝa] [longo] specifier

Kie la specifier karaktero fine estas la plej signifa komponanto, pro tio difinas kion signoj estas ĉerpita, ilia interpretado kaj la tipo de lia responda argumento:
specifier Priskribo Signoj ĉerpitaj
i, u Entjero Ajna nombro de ciferoj, laŭvole antaŭita de signo (+-).
Decimaloj supozis defaŭlte (0-9), sed oni 0 prefikso enkondukas okuma ciferoj (0-7), kaj 0x deksesumaj ciferoj (0-f).
d Dekuma entjero Kiom ajn da decimaloj (0-9), laŭvole antaŭita de signo (+-).
o Okuma entjero Neniu numero de okuma ciferoj (0-7), laŭvole antaŭita de signo (+-).
x Deksesuma entjero Kiom ajn da deksesumaj ciferoj (0-9, af, AF), laŭvole antaŭita de 0x 0x aŭ, kaj ĉiuj laŭvole antaŭita de signo (+-).
f, e, g, Glitpunkta nombro Serio de decimalaj ciferoj (aŭ deksesuma , se antaŭita de 0x 0x aŭ), laŭvole enhavanta dekuma punkto, laŭvole preceeded de signo (+-) kaj laŭvole sekvita de la TTTE karaktero kaj dekuma entjero (aŭ pP kaj deksesuma entjero). Aŭ ajna alia sekvenco apogita de strtod .
c Karaktero La postan karakteron. Se larĝa escepte 1 estas specifita, la funkcio legas ĝuste larĝa karakteroj kaj tendencas ilin en la pluaj lokoj de la tabelo pasis kiel argumento. Neniu nula karaktero estas aldonita al la fino.
s Linio de signoj Ajna nombro de ne-spaceto karakteroj, haltante ĉe la unua spaceto karaktero trovitaj. Al finanta nula karaktero estas aŭtomate aldonita al la fino de la stokitaj sekvenco.
p Pointer adreso Vico da signoj reprezentas puntero. La aparta formato uzita dependas de la sistemo kaj biblioteko efektivigo, sed ĝi estas la sama kiel la uzitaj por formati% p en fprintf .
[Gravuloj] Scanset Neniu numero de la karakteroj specifitaj inter la krampoj.
Al haltostreko (-) kiu ne estas la unua signo povas produkti ne-porteblaj konduto en iuj biblioteko implementaciones.
[^ Signoj] Neis, neigita scanset Kiom ajn da karakteroj neniu el ili specifita kiel signoj inter la krampoj.
n Grafo Neniu enigo estas konsumita.
La nombro de signoj skribita ĝis nun estas stokita en la pinta loko.
% % A% sekvita de alia% koincidas sola%.
Krom n, almenaŭ unu signo estos konsumitaj de ajna specifier. Alie la partio malsukcesas, kaj la tuŝo finiĝas tie.

La formato specifier povas ankaŭ enhavi sub-specifiers: asterisko (*), larĝo kaj longo (en tiu ordo), kiuj estas nedeviga kaj sekvu tiujn specifaĵoj:
sub-specifier priskribo
* Laŭvola ekde asterisko indikas, ke la datumoj estas legebla de la rojo sed ignoris (te ĝi ne estas konservataj en la situo punktita per argumento).
larĝa Specifas la maksimuman nombron de karakteroj por legi en la nuna legado operacio (nedeviga).
longeco Unu el hh, h, l, ll, j, z, t, L (nedeviga).
Ĉi ŝanĝas la atendata tipo de la stokado indikis por la responda argumento (vidu sube).

Ĉi tiu estas abako montras la tipoj atendas por la responda argumentoj kie eniro estas stokita (ambaŭ kun kaj sen longa sub-specifier):

specifiers
longeco donis uox fega cs [] [^] p n
(Neniu) int * sensigna _int_ * flosi * char * neniigas ** int *
hh subskribita char * unsigned char *


subskribita char *
h mallonga int * sensigna mallongaj int *


mallonga int *
l long int * sensigna long int * duobla * wchar_t *
long int *
LL long long int * sensigna long long int *


long long int *
j intmax_t * uintmax_t *


intmax_t *
z size_t * size_t *


size_t *
t ptrdiff_t * ptrdiff_t *


ptrdiff_t *
L

longa duobla *


... (Pliaj argumentoj)
Depende de la formato kordoj, la funkcio povas atendi vico de pliaj argumentoj, ĉiu enhavante puntero al asignitaj stokado kie la lego de la ĉerpitaj karakteroj estas stokita kun la taŭga tipo.
Devus esti almenaŭ kiel multaj el tiuj argumentoj kiel la nombro de valoroj stokitaj de la formato specifiers. Pliaj argumentoj estas ignoritaj de la funkcio.
Tiuj argumentoj estas antaŭvideble estos punteros: stoki la rezulto de fscanf operacio sur regula variablo, lia nomo estu antaŭita de la referenco operatoro (&) (vidu ekzemplon ).

Return Value

Sur sukceso, la funkcio redonas la nombron de artikoloj de la argumento listo sukcese plenigis. Ĉi grafo povas egali la atendata nombro de artikoloj aŭ esti malpli (eĉ nulo) pro trafa fiasko, legado eraro, aux la atingo de la fino-de-dosiero.

Se legado eraro okazas aŭ la fino de dosiero estas atingita dum legado, konvenas indikilo estas metita ( feofferror ). Kaj, se ĉu okazas antaŭ ajna datumoj povus sukcese legi, EOF estas redonita.

Se kodigo eraro okazas interpretado larĝa karakteroj, la funkcio aroj errno al EILSEQ.

Ekzemplo


/* fscanf example */
#include <stdio.h>

int main ()
{
  char str [80];
  float f;
  FILE * pFile;

  pFile = fopen ("myfile.txt","w+");
  fprintf (pFile, "%f %s", 3.1416, "PI");
  rewind (pFile);
  fscanf (pFile, "%f", &f);
  fscanf (pFile, "%s", str);
  fclose (pFile);
  printf ("I have read: %f and %s \n",f,str);
  return 0;
}

Nenhum comentário:

Postar um comentário