Scanf C funkcija: opis

U ovom članku funkcija scanf () se smatra u općem obliku bez upućivanja na određeni standard, pa su ovdje uključeni podaci iz bilo kojeg standarda C99, C11, C ++ 11, C ++ 14. Možda, u nekim standardima funkcija radi s razlikama od materijala navedenog u članku.

Scanf C funkcija - opis

scanf () je funkcija koja se nalazi u zaglavlju stdio.h (C) i cstdio (C + +), također se zove formatiran ulaz podataka u program. scanf čita znakove iz standardnog ulaznog toka (stdin) i pretvara ih prema formatu, a zatim ih piše na navedene varijable. Format - znači da su podaci o prijemu dani određenoj vrsti. Tako je opisana funkcija scanf C:

scanf ("% format", varijabla1, varijabla2, [hellip-]]),

gdje se varijable prenose kao adrese. Razlog ovakvog načina prenošenja varijabli na funkciju je očigledan: kao rezultat rada vraća vrijednost koja ukazuje na pogreške pa je jedini način da se promijene vrijednosti varijabli šalje na adresu. Također, zahvaljujući ovoj metodi, ova funkcija može obraditi podatke bilo koje vrste.

Neki programeri, zbog analogije s drugim jezicima, pozivaju funkcije poput scanf () ili printf () postupaka.

Scanf vam omogućuje unos svih osnovnih jezičnih tipova: char, int, float, string, itd. U slučaju varijable tipa string nema potrebe za određivanje znak adresu - „” kao varijabla tipa string je niz, a ime je adresa prvog elementa niza u memoriji računala.

Koristeći C u C + +

Format unosa podataka ili upravljačka linija

Počnimo s primjerom korištenja funkcije scanf C iz opisa.

#include int glavni () {int x-while (scanf ("% d", x) == 1) printf ("% d n", x) -return 0- // zahtjev linux-sustavi}

Format unosa sastoji se od sljedećih četiri parametra:%

  • [width] [modifiers] tipa. Znak "%" i tip su obvezni parametri. To jest, minimalni format izgleda ovako: "% s", "% d" i tako dalje.

    Općenito, znakovi koji čine niz formata dijele se na:

    • formata specifičara - sve što počinje znakom%;
    • razdvajanje ili razmak - oni su prostor, kartica ( t), nova linija ( n);
    • znakova koji su različiti od razmaka.

    Funkcija možda nije sigurna.

    Upotrijebite scanf_s () umjesto scanf ().

    (poruka iz Visual Studioa)

    Upišite ili oblikujte specifikacije ili znakove konverzije ili kontrolne znakove

    Binarni kod

    Opis scanf C mora sadržavati barem jedan specifier formata koji je označen na kraju izraza koji počinju znakom "%". Programu se kaže da tip podataka očekuje prilikom tipkanja, obično s tipkovnice. Popis svih specifikacija formata u donjoj tablici.

    broj

    vrsta

    vrijednost

    1

    % c

    Program čeka znak unosa. Varijabla za pisanje mora imati vrstu znaka char.

    2

    % d

    Program čeka decimalni broj cijelog broja. Varijabla mora biti tipa int.

    3

    % i

    Program čeka decimalni broj cijelog broja. Varijabla mora biti tipa int.

    4

    % e,% E

    Program očekuje unos broja s pomičnim zarezom (zarezom) u eksponencijalnom obliku. Varijabla mora biti plutajuće vrste.

    5

    % f

    Program čeka da se unese broj (zarez) s pomičnim zarezom. Varijabla mora biti plutajuće vrste.

    6

    % g,% G

    Program čeka da se unese broj (zarez) s pomičnim zarezom. Varijabla mora biti plutajuće vrste.

    7

    % a

    Program čeka da se unese broj (zarez) s pomičnim zarezom. Varijabla mora biti plutajuće vrste.

    8

    % o



    Program čeka oktalni broj. Varijabla mora biti tipa int.

    9

    % s

    Program čeka liniju. Niz je skup bilo kojeg znaka prije prvog razgraničenja znaka. Varijabla mora biti tipa niza.

    10

    % x,% X

    Program čeka heksadecimalni broj. Varijabla mora biti tipa int.

    11

    % p

    Varijabla čeka pokazivač da unese. Varijabla mora imati vrstu pokazivača.

    12

    % n

    Vrijedi cijelu vrijednost za varijablu jednaku broju znakova skeniranih prije tekućeg trenutka funkcijom scanf.

    13

    % u

    Program čita nepotpisani cijeli broj. Vrsta varijable mora biti nepotpisani cijeli broj.

    14

    % b

    Program očekuje unos binarnog broja. Varijabla mora biti tipa int.

    15

    % []

    Skup skeniranih znakova. Program čeka unos znakova, iz ograničenog bazena koji je naveden između kvadratne zagrade. scanf će raditi sve dok postoje znakovi iz navedenog skupa na ulaznom streamu.

    16

    %%

    Znak "%".

    Likovi u obliku niza

    C + + kod

    Zvjezdica (*)

    Zvjezdica (*) označava da se operacija dodjele mora potisnuti. Zvjezdica se nalazi odmah nakon znaka "%". Na primjer,

    scanf ("% d% * c% d", x, y) - // ignorirajte znak između dva cjelobrojna broja. scanf ("% s% * d% s", str, str2) - // ignoriraj cijeli broj između dva retka.

    To jest, ako upišete "45-20" u konzolu, program izvodi sljedeće:

    1. Varijabla "x" bit će postavljena na 45.
    2. Varijabla "y" bit će podešena na 20.
    3. I znak minus (crtica) ";" zanemaruje se zahvaljujući "% * c".

    Širina (ili širina polja)

    Ovo je cijeli broj između znaka "%" i formata specifičara koji određuje maksimalni broj znakova za čitanje za trenutnu operaciju čitanja.

    scanf ("% 20s", str) - // pročitajte prvih 20 znakova iz ulaznog toka

    Treba imati na umu nekoliko važnih točaka:

    1. scanf prestaje raditi ako naiđe na znak razdvajanja, čak i ako ne broji 20 znakova.
    2. Ako se unese više od 20 znakova, samo ih prvih 20 bit će napisane na varijablu str.

    Izmjenjivači tipa (ili točnosti)

    Kôd čuvara zaslona

    To su posebne zastavice koje mijenjaju vrstu podataka za koje se očekuje unos. Zastava je lijevo od vrste specifikacije:

    • L ili l (mali L) Ako koristite "l" sa specifikacijama d, i, o, u, x, zastavica govori programu da se očekuje dugo int podatke. Ako koristite "l" s specifikacijom e ili f, zastavica naziva programu da treba čekati dvostruku vrijednost. Upotreba "L" govori programu da se očekuje duga dvostruka vrijednost. Upotreba "l" s specifikacijama "c" i "s" govori programu da se očekuju znakovi dvobučnih tipova tipa wchar_t. Na primjer, "% lc", "% ls", "% l [asd]".
    • h je zastava koja označava vrstu kratkog spoja.
    • hh - označava da je varijabla pokazivač na vrijednost tipa znaka char ili unsigned char. Zastava se može koristiti s specifikacijama d, i, o, u, x, n.
    • ll (dvije male L) - označava da je varijabla pokazivač na vrijednost potpisane vrste dugo int ili nepotpisani dugotrajni int. Zastava se koristi s specifikacijama: d, i, o, u, x, n.
    • j označava da je varijabla pokazivač na vrstu intmax_t ili uintmax_t iz datoteke zaglavlja stdint.h. Koristi se s specifikacijama: d, i, o, u, x, n.
    • z - označava da je varijabla pokazivač veličine type_t, čija je definicija u stddef.h. Koristi se s specifikacijama: d, i, o, u, x, n.
    • t znači da je varijabla pokazivač na vrstu ptrdiff_t. Definicija za ovu vrstu je u stddef.h. Koristi se s specifikacijama: d, i, o, u, x, n.

    Jasnije, slika s modifikatorima može se prikazati u obliku tablice. Ovaj opis scanf C za programere bit će jasniji.

    Specifičari i modifikatori tipa

    Ostali znakovi

    Bilo koji znak koji će se ispuniti u formatu bit će odbačen. Važno je napomenuti da prisutnost kontrolne linije ili bijeli prostor odvajanja karaktera (novi red, prostora, kartica) može dovesti do različitog ponašanja funkcije. U jednoj verziji scanf () će pročitati bez spremanja bilo koji broj separatora do točke dok se ne pogodi osim graničnik karaktera, au drugoj verziji - praznine (kad) ne igra ulogu, a izraz „% d +% d” je ekvivalent za „% d +% d ".

    Uzorak C + + koda

    primjeri

    Razmotrimo nekoliko primjera koji nam omogućuju razmišljanje i preciznije razumijevanje funkcioniranja funkcije.

    scanf ( "% 3s", str) - // ako upišete u konzoli liniji «1d2s3d1-3», napisane samo u STR «1d2» scanf ( "% dminus% d", x, y) - // karakter «minus» između dva broja će otbroshenyscanf ( „% 5 [0-9]”, str) - // ulazni znakovi u STR će se dogoditi sve dok oni ne će biti 5, a simboli su brojevi iz 0 do 9.scanf ( "% lf" d) - // očekuje se unos podataka vrste doublescanf ("% hd", x) - // očekuju nekoliko vrsta shortscanf ("% hu", y) - // očekuju niz tipova nepotpisanih shortscanf ("lx", z) - // očekuju niz vrsta dugih int

    Iz navedenih primjera možete vidjeti kako se očekivani broj razlikuje ovisno o korištenju različitih simbola.

    scanf C - opis za početnike

    Ovaj odjeljak će biti koristan za početnike. Često, morate imati pri ruci ne toliko potpun opis scanf C, kao detalje funkcije.

    • Funkcija je nešto zastarjela. Postoji nekoliko različitih implementacija u knjižnicama različitih verzija. Na primjer, napredna funkcija scanf S C, čiji opis možete pronaći na Microsoftovu web mjestu.
    • Broj specifikacija u formatu mora odgovarati broju argumenata proslijeđenoj funkciji.
    • Elementi ulaznog toka trebaju biti odvojeni jedino razdvajanjem simbola: prostorom, karticom, novom linijom. Zarez, točka-zarez, razdoblje itd. - ti se znakovi ne mogu razdvojiti za funkciju scanf ().
    • Ako scanf susreće znak razdvajanja, ulaz će biti zaustavljen. Ako postoji više od jedne varijable za čitanje, scanf će nastaviti čitati sljedeću varijablu.
    • Najmanji nedosljednost u obliku ulaznih podataka dovodi do nepredvidljivih rezultata programa. Pa, ako program završi s pogreškom. No, često se program nastavlja raditi i pogrešno.
    • scanf ("% 20s hellip- ", hellip -) - Ako ulazni tok prelazi 20 znakova, scanf će pročitati prvih 20 znakova i prestati raditi ili otići na čitanje sljedeće varijable ako je naveden. Sljedeći poziv za scanf nastavit će čitati ulazni tok s mjesta na kojem je prekinut prethodni callf. Ako se susreće znak razdvajanja tijekom čitanja prvih 20 znakova, scanf prestaje raditi ili nastavlja čitati sljedeću varijablu, čak i ako ne broji 20 znakova za prvu varijablu. U tom će slučaju svi nepročitani simboli biti pridodani sljedećoj varijabli.
    • Ako skup skeniranih znakova počinje s "^", onda scanf će pročitati podatke dok ne dođe do razdvajanja znaka ili znaka iz skupa. Na primjer, "% [^ A-E1-5]" će pročitati podatke iz streama sve dok se ne pojavi jedno od slova engleske abecede od A do E u velikom ili jedan od brojeva od 1 do 5.
    • Scanf C funkcija, prema opisu, vraća broj jednaku uspješnom broju zapisa u varijablama. Ako scanf trgovinama 3 varijable, rezultat uspjeha funkcija vraća broj 3. Ako scanf nije mogao napisati bilo varijabla, rezultat je 0. Na kraju, ako scanf općenito ne može početi raditi za bilo kojeg razloga, rezultat je EOF ,
    • Ako funkcija scanf () nije ispravno dovršila svoj rad. Na primjer, scanf ("% d", x) - očekivani broj, a ulaz je došao simbolima. Sljedeći callf () poziv započinje od mjesta gdje je bio u ulaznom streamu, gdje je prekinut prethodni poziv funkcije. Da biste riješili taj problem, trebate riješiti problematične simbole. To se može obaviti, na primjer, pozivanjem scanf ("% * s"). To jest, funkcija čita niz znakova i baca je van. Na tako lukav način možete nastaviti unositi potrebne podatke.
    • U nekim implementacijama scanf (), uporaba ";" u skupu skeniranih znakova nije dopustiva.
    • Pojedinac "% c" čita svaki znak iz streama. To jest, on također čita separator simbola. Da biste preskočili znak razgraničenja i nastavili čitati željeni znak, možete upotrijebiti "% 1s".
    • Ako koristite kvalifikaciju "c", možete koristiti širinu "% 10c", ali u obliku varijable scanf, morate prenijeti niz char elemenata.
    • "% [A-Z]" - to znači "sve male slova engleske abecede" i "% [z-a]" - je jednostavno 3 znaka: lsquo-zrsquo-, lsquo-arsquo-, lsquo-rsquo-. Drugim riječima, simbol ";" označava raspon samo ako je između dva znaka u ispravnom slijedu. Ako „-” je na kraju govora, na početku ili u pogrešnom redoslijedu znakova na obje strane njih, to je samo simbol crticom, a ne raspon.
    C + + kod

    zaključak

    To dovršava opis scanf C. To je zgodna prikladna funkcija za rad u malim programima i korištenjem postupka programiranja. Međutim, glavni nedostatak je količina nepredvidivih pogrešaka koje se mogu pojaviti pri uporabi scanfa. Stoga opis programa scanf C u programiranju najbolje se čuva prije očiju. Glavni stručni projekti iostream struje koriste se, s obzirom na činjenicu da oni imaju sposobnosti više razine bolje omogućiti uhvatiti i nositi pogreške, kao i rad sa značajnim količinama podataka. Također uvažen, opis scanf C na ruskom je dostupan na mnogim izvorima mreže, kao i primjere njegove uporabe, s obzirom na funkciju dobi. Stoga, ako je potrebno, uvijek možete pronaći odgovor na tematske forume.

    Dijelite na društvenim mrežama:

    Povezan
  • Funkcija `INDEX` u programu Excel: opis, primjena i primjeriFunkcija `INDEX` u programu Excel: opis, primjena i primjeri
    Što funkcionira SQL CONCAT?Što funkcionira SQL CONCAT?
    Što funkcionira PHP mikrotime funkcija?Što funkcionira PHP mikrotime funkcija?
    Funkcija tabulacije: kako napisati program?Funkcija tabulacije: kako napisati program?
    Regresijska jednadžbaRegresijska jednadžba
    Metoda najmanjih kvadrata u programu Excel. Regresijska analizaMetoda najmanjih kvadrata u programu Excel. Regresijska analiza
    Printf C: opis, oblikovanje, primjeriPrintf C: opis, oblikovanje, primjeri
    Mjehurić sortiranje jednodimenzionalnog polja: algoritam, programski kod na C jezikuMjehurić sortiranje jednodimenzionalnog polja: algoritam, programski kod na C jeziku
    SQL SUBSTRING funkcijaSQL SUBSTRING funkcija
    Funkcija zbrajanja u SQL: SUMFunkcija zbrajanja u SQL: SUM
    » » Scanf C funkcija: opis
    LiveInternet