OqPoWah.com

Funkcija Scanf C: opis

V tem članku je funkcija scanf () obravnavana v splošni obliki brez sklicevanja na določen standard, zato so tukaj vključeni podatki iz standardov C99, C11, C ++ 11, C ++ 14. Morda v nekaterih standardih funkcija deluje z razlikami od gradiva, navedenega v članku.

Funkcija Scanf C - opis

scanf () - funkcija se nahaja v glavi datoteke stdio.h (C) in cstdio (C ++), se imenuje tudi oblikovane vhodne podatke v program. scanf bere znake iz standardnega vhodnega toka (stdin) in jih pretvori v skladu z obliko, nato pa jih zapisuje v določene spremenljivke. Oblika - pomeni, da so podatki o vpisu določeni tipi. Tako je opisana funkcija scanf C:

scanf ("% format", spremenljivka1 [, spremenljivka2, [hellip-]]),

kjer se spremenijo spremenljivke kot naslove. Razlog za ta način prenosa spremenljivk na funkcijo je očiten: kot rezultat dela vrne vrednost, ki označuje napake, zato je edini način za spreminjanje vrednosti spremenljivk pošiljanje na naslov. Tudi, zahvaljujoč tej metodi, lahko funkcija obdeluje podatke vseh vrst.

Nekateri programerji zaradi analogije z drugimi jeziki kličejo funkcije, kot so scanf () ali printf (), postopki.

Scanf vam omogoča vnos vseh osnovnih jezikovnih vrst: char, int, float, string, itd. V primeru spremenljivk vrste niza ni treba navesti signala za naslov, ker je spremenljivka vrste niza matrika in njegovo ime je naslov prvega elementa matrike v pomnilniku računalnika.

Uporaba C v C + +

Format vnašanja podatkov ali kontrolna linija

Začnimo s primerom uporabe funkcije scanf C iz opisa.

#include int main () {int x-while (scanf ("% d", x) == 1) printf ("% d n", x) -return 0-// zahteva linux-systems}

Vhodni format je sestavljen iz naslednjih štirih parametrov:%

  • [width] [modifiers] type. Znak "%" in vrsta sta obvezni parametri. To pomeni, da je minimalni format videti takole: "% s", "% d" in tako naprej.

    Na splošno so znaki, ki sestavljajo formatni niz, razdeljeni na:

    • specifikatorji formata - vse, kar se začne z znakom%;
    • ločevanje ali presledek - to so presledek, zavihek ( t), nova vrstica ( n);
    • znakov, ki se razlikujejo od presledkov.

    Funkcija morda ni varna.

    Uporabite scanf_s () namesto scanf ().

    (sporočilo Visual Studio)

    Vnesite ali oblikujte specifikatorje ali znake pretvorbe ali kontrolne znake

    Binarna koda

    Opis scanf C mora vsebovati vsaj določitveni format, ki je označen na koncu izrazov, ki se začnejo z znakom "%". Programu pripoveduje vrsto podatkov, ki jih lahko pričakujete pri tipkanju, običajno s tipkovnice. Seznam vseh specifikacij formatov v spodnji tabeli.

    Ne.

    Tip

    Pomen

    1

    % c

    Program čaka, da se znak vnese. Spremenljivka za pisanje mora imeti znak vrste char.

    2

    % d

    Program čaka na decimalno številko vrste števila. Spremenljivka mora biti tipa int.

    3

    % i

    Program čaka na decimalno številko vrste števila. Spremenljivka mora biti tipa int.

    4

    % e,% E

    Program pričakuje vnos številke s plavajočo vejico (vejic) v eksponentni obliki. Spremenljivka mora biti tipa float.

    5

    % f

    Program čaka, da se vnese številka s plavajočo vejico (vejicami). Spremenljivka mora biti tipa float.

    6

    % g,% G

    Program čaka, da se vnese številka s plavajočo vejico (vejicami). Spremenljivka mora biti tipa float.

    7

    % a

    Program čaka, da se vnese številka s plavajočo vejico (vejicami). Spremenljivka mora biti tipa float.

    8. mesto

    % o




    Program čaka na oktalsko številko. Spremenljivka mora biti tipa int.

    9

    % s

    Program čaka na vrstico. Niz je niz poljubnih znakov, preden je prvi znak omejen. Spremenljivka mora biti vrsto vrstice.

    10

    % x,% X

    Program čaka na šestnajstiško številko. Spremenljivka mora biti tipa int.

    11

    % p

    Spremenljivka čaka, da se kazalec vnese. Spremenljivka mora imeti vrsto kazalca.

    12. mesto

    % n

    Zapiše celoštevilčno vrednost spremenljivke, ki je enaka številu preiskovanih znakov pred trenutnim trenutkom s funkcijo scanf.

    13

    % u

    Program bere nepodpisano celo število. Vrsta spremenljivke mora biti nepotno celo število.

    14

    % b

    Program pričakuje, da bo vnesel binarno številko. Spremenljivka mora biti tipa int.

    15

    % []

    Niz skeniranih znakov. Program čaka, da se vnesejo znaki iz omejenega nabora, ki je določen med kvadratni oklepaj. scanf bo delal tako dolgo, dokler v vhodnem toku ne bodo zapisani znaki iz določenega nabora.

    16

    %%

    Znak "%".

    Znaki v nizu formatov

    C + + koda

    Znak zvezdic (*)

    Zvezdica (*) je zastavica, ki označuje, da je treba postopek dodelitve zavreti. Zvezdica se postavi takoj za znakom "%". Na primer,

    scanf ("% d% * c% d", x, y) - / prezrijem znak med dvema cela števila. scanf ("% s% * d% s", str, str2) - // prezrijem celo število med dvema vrsticama.

    To pomeni, da če vnesete »45-20« v konzolo, program naredi naslednje:

    1. Spremenljivka "x" bo nastavljena na 45.
    2. Spremenljivka "y" bo nastavljena na 20.
    3. In znak "minus" (pomišljaj) ";" bo zaradi igranja "% * c" prezrt.

    Širina (ali širina polja)

    To je celo število med znakom "%" in specifikatorjem formata, ki določa največje število znakov, ki jih je mogoče brati za trenutno operacijo bralnika.

    scanf ("% 20s", str) - // preberite prvih 20 znakov iz vhodnega toka

    Upoštevati je treba nekaj pomembnih točk:

    1. scanf bo prenehal delovati, če naleti na ločevalni znak, tudi če ne šteje 20 znakov.
    2. Če vnesete več kot 20 znakov, bodo le na prvih 20 zapisanih v spremenljivko str.

    Modifikatorji tipa (ali natančnosti)

    Ohranjevalnik zaslona

    To so posebne zastavice, ki spreminjajo vrsto podatkov, ki naj bi jih vnesli. Zastava je levo od vrste specifikacij:

    • L ali l (majhna L) Če uporabljate "l" z določili d, i, o, u, x, zastava pove programu, da se pričakujejo dolgi podatki int. Če uporabljate "l" s specifikatorjem e ali f, zastava pove programu, da mora počakati na dvojno vrednost. Uporaba "L" pove programu, da se pričakuje dolga dvojna vrednost. Uporaba "l" s specifikatorji "c" in "s" pove programu, da se pričakujejo dvobajtni znaki tipa wchar_t. Na primer, "% lc", "% ls", "% l [asd]".
    • h je zastava, ki označuje vrsto kratkega sporočila.
    • hh - označuje, da je spremenljivka kazalec na vrednost tipa podpisanega znaka ali nepodpisane črke. Zastava se lahko uporablja s specifikacijami d, i, o, u, x, n.
    • ll (dve majhni L) - označuje, da je spremenljivka kazalec na vrednost podpisanega tipa dolgo dolgo int ali nepodpisana dolga dolgo int. Zastava se uporablja z specifikacijami: d, i, o, u, x, n.
    • j označuje, da je spremenljivka kazalec na vrsto intmax_t ali uintmax_t iz datoteke glave stdint.h. Uporablja se s specifikacijami: d, i, o, u, x, n.
    • z - označuje, da je spremenljivka kazalec na tip velikosti_t, katerega definicija je v stddef.h. Uporablja se s specifikacijami: d, i, o, u, x, n.
    • t pomeni, da je spremenljivka kazalec na tip ptrdiff_t. Opredelitev za to vrsto je v stddef.h. Uporablja se s specifikacijami: d, i, o, u, x, n.

    Natančneje, slika z modifikatorji je lahko prikazana v obliki tabele. Ta opis scanf C za programerje bo jasnejši.

    Specifikatorji in tipi modifikatorjev

    Drugi znaki

    Vsi znaki, ki bodo izpolnjeni v formatu, bodo zavrženi. Treba je opozoriti, da lahko prisotnost presledkov ali ločitev znakov v nadzorni črti (nova črta, presledek, zavihka) povzroči različno obnašanje funkcije. V eni različici scanf () bo prebral brez shranjevanja poljubno število separatorji do točke, dokler ne zadene razen ločilo značaj, in v drugi različici - razlike (ko) ne igrajo vloge, in izraz "% d +% d" je ekvivalent "% d +% d ".

    Vzorec C + + kode

    Primeri

    Razmislimo o številnih primerih, ki nam omogočajo razmišljanje in natančneje razumevanje delovanja funkcije.

    scanf ( "% 3s", str) - // če vtipkate v konzoli liniji «1d2s3d1-3", napisana le v str «1d2» scanf ( "% dminus% d", x, y) - // lik «minus» med dvema številkama bo otbroshenyscanf ( "% 5 [0-9]", str) - // vhodnih znakov str bo prišlo, dokler ne bo 5 in simboli so številke iz 0 do 9.scanf ("% lf", d) - // pričakuje, da bo vnesel podatke tipa doublescanf ("% hd", x) - // pričakujete, da bo vrsta shortscanf ("% hu", y) - // pričakujte, da je vrsta vrste nepodpisanih shortscanf ("lx", z) - // pričakujejo številne vrste int

    Iz podanih primerov lahko vidite, kako se pričakovano število spreminja z uporabo različnih simbolov.

    scanf C - opis za začetnike

    Ta razdelek bo uporaben za začetnike. Pogosto morate imeti pri roki ne le popoln opis scanf C, kot podrobnosti o funkciji.

    • Funkcija je nekoliko zastarela. V knjižnicah različnih različic obstaja več različnih implementacij. Na primer, napredna funkcija scanf S C, opis katere najdete na spletnem mestu Microsoft.
    • Število specifikacij v formatu se mora ujemati s številom argumentov, ki so bili posredovani funkciji.
    • Elemente vhodnega toka je treba ločiti samo z ločitvijo simbolov: prostor, zavihka, nova črta. Z vejico, podpičjem, obdobjem itd. - ti znaki niso ločljivi za funkcijo scanf ().
    • Če scanf naleti na ločilni znak, bo vhod ustavljen. Če je za branje več kot ena spremenljivka, bo scanf nadaljeval z branjem naslednje spremenljivke.
    • Najmanjša neskladnost v obliki vhodnih podatkov vodi do nepredvidljivih rezultatov programa. No, če se program konča z napako. Toda pogosto program še naprej deluje in nepravilno deluje.
    • scanf ("% 20s hellip- ", hellip -) - Če vhodni tok presega 20 znakov, bo scanf prebral prvih 20 znakov in bodisi prenehal delovati ali prebrati naslednjo spremenljivko, če je določena. Naslednji klic do scanf bo še naprej bral vhodni tok, od koder se je prejšnji klic prestal. Če se med branjem prvih 20 znakov prikaže ločilni znak, bo scanf prenehal delovati ali prebrati naslednjo spremenljivko, tudi če za prvo spremenljivko ne šteje 20 znakov. V tem primeru bodo vsi neprebrani simboli pritrjeni na naslednjo spremenljivko.
    • Če se nabor skeniranih znakov začne s "^", bo scanf prebral podatke, dokler ne naleti ločilnega znaka ali znaka iz nabora. Na primer, "% [^ A-E1-5]" se glasi iz potoka, dokler eden od znakov angleške abecede bodo izpolnjeni od A do E z velikimi črkami ali eno od številk od 1 do 5.
    • Funkcija scanf C po opisu vrne številko, ki je enaka uspešnemu številu zapisov v spremenljivkah. Če scanf zabeleži 3 spremenljivke, bo rezultat uspešnega delovanja funkcije vrnitev številke 3. Če scanf ne bi mogel pisati nobenih spremenljivk, bi bil rezultat 0. Nazadnje, če se skeniranje sploh ne bi moglo začeti iz kakršnega koli razloga, bi bil rezultat EOF .
    • Če je funkcija scanf () nepravilno opravila delo. Na primer, scanf ("% d", x) - pričakovano število, vhod pa je dobil simbol. Naslednji klic scanf () se bo začel od tam, kjer je bil v vhodnem toku, kjer se je končal prejšnji klic funkcije. Če želite premagati to težavo, se morate znebiti težavnih simbolov. To lahko storite na primer tako, da pokličete scanf ("% * s"). To pomeni, da funkcija prebere vrsto znakov in jo vrže ven. Na tako zvit način lahko še naprej vnašate zahtevane podatke.
    • V nekaterih izvedbah scanf () je uporaba ";" v naboru skeniranih znakov nedopustna.
    • Specifikator »% c« bere vsak znak iz toka. To pomeni, da tudi bere ločilo simbolov. Če želite preskočiti znak za razmejitev in nadaljevati branje želenega znaka, lahko uporabite »% 1s«.
    • Če uporabljate kvalifikator "c", lahko uporabite širino "% 10c", nato pa v obliki spremenljivke scanf, morate prenesti niz elementov char.
    • "% [A-z]" pomeni "vse male črke angleške abecede" in "% [z-a]" pomeni le 3 znake: lsquo-zrsquo-, lsquo-arsquo-, lsquo - rsquo-. Z drugimi besedami, simbol ";" pomeni obseg le, če je med dvema znakoma v pravilnem zaporedju. Če je ";" na koncu izraza, na začetku ali v napačnem vrstnem redu znakov na obeh straneh, potem je to le vezaj, ne pa obseg.
    C + + koda

    Zaključek

    To dopolnjuje opis scanf C. To je prijetna priročna funkcija za delo v majhnih programih in uporaba postopka proceduralnega programiranja. Vendar pa je glavna pomanjkljivost količina nepredvidljivih napak, ki se lahko pojavijo pri uporabi scanf. Zato je opis skeniranja C v programiranju najbolje shranjen pred očmi. V velikih strokovnih projektih se uporabljajo tokovi iostream, ker imajo zmogljivosti na višji ravni, bolje omogočajo ujeti in obdelujejo napake ter delajo tudi z velikimi količinami informacij. Prav tako je treba opozoriti, da je opis scanf C v ruskem jeziku na voljo v številnih omrežnih virih, pa tudi primere njegove uporabe zaradi starosti funkcije. Zato, če je potrebno, vedno najdete odgovor na tematske forume.

    Zdieľať na sociálnych sieťach:

    Príbuzný