2024 Avtor: Howard Calhoun | [email protected]. Nazadnje spremenjeno: 2024-01-17 19:07
V tem članku je funkcija scanf() obravnavana v splošni obliki brez sklicevanja na določen standard, zato so tukaj vključeni podatki iz katerega koli standarda C99, C11, C++11, C++14. Morda v nekaterih standardih funkcija deluje z razlikami od materiala, predstavljenega v članku.
funkcija scanf C - opis
scanf() je funkcija, ki se nahaja v naslovnih datotekah stdio.h(C) in cstdio(C++), znana tudi kot formatiran programski vnos. scanf bere znake iz standardnega vhodnega toka (stdin) in jih pretvori v skladu s formatom, nato jih zapiše v določene spremenljivke. Format - pomeni, da se podatki ob prejemu pretvorijo v določeno obliko. Tako je opisana funkcija scanf C:
scanf("%format", &variable1[, &variable2, […]), kjer so spremenljivke posredovane kot naslovi. Razlog za ta način posredovanja spremenljivk v funkcijo je očiten: kot rezultat dela vrne vrednost, ki kaže na prisotnost napak, zatoedini način za spreminjanje vrednosti spremenljivk je s posredovanjem po naslovu. Zahvaljujoč tej metodi lahko funkcija obdela podatke katere koli vrste.
Nekateri programerji se nanašajo na funkcije, kot sta scanf() ali printf() kot na postopke zaradi analogije z drugimi jeziki.
Scanf omogoča vnos vseh osnovnih jezikovnih tipov: char, int, float, niz itd. V primeru spremenljivk tipa niz ni treba podajati naslovnega znaka - "&", saj je spremenljivka tipa niz matrika, njeno ime pa je naslov prvega elementa matrike v pomnilniku računalnika..
Oblika za vnos podatkov ali kontrolni niz
Začnite z ogledom primera funkcije scanf C iz opisa.
include int main() { int x; while (scanf("%d", &x)==1) printf("%d\n", x); vrni 0; //zahteva za sisteme linux }
Format vnosa je sestavljen iz naslednjih štirih parametrov: vrsta %[width][modifiers]. V tem primeru sta znak "%" in vrsta obvezna parametra. To pomeni, da je minimalni format videti takole: “%s”, “%d” in tako naprej.
Na splošno so znaki, ki sestavljajo formatni niz, razdeljeni na:
- opisovalci oblike - vse, ki se začne z %;
- presledki ali presledki - to so presledek, tabulator (t), nova vrstica (n);
- znaki, ki niso presledki.
Funkcija morda ni varna.
Uporabi scanf_s() namesto scanf().
(sporočilo iz Visual Studio)
Opisovalci vrste ali oblike, ali pretvorbeni znaki ali kontrolni znaki
Deklaracija scanf C mora vsebovati vsaj opisnik formata, ki je podan na koncu izrazov, ki se začnejo z "%". Programu pove, katero vrsto podatkov pričakuje pri vnašanju, običajno s tipkovnice. Seznam vseh specificatorjev oblike v spodnji tabeli.
Vrsta | pomen | |
1 | %c | Program čaka na vnos znakov. Spremenljivka, ki jo želite zapisati, mora biti znaka tipa char. |
2 | %d | Program pričakuje vnos decimalne vrste celega števila. Spremenljivka mora biti vrste int. |
3 | %i | Program pričakuje vnos decimalne vrste celega števila. Spremenljivka mora biti vrste int. |
4 | %e, %E | Program pričakuje, da bo vnesel število s plavajočo vejico (vejica) v eksponentni obliki. Spremenljivka mora biti tipa float. |
5 | %f | Program pričakuje številko s plavajočo vejico (vejica). Spremenljivka mora biti tipa float. |
6 | %g, %G | Program pričakuje številko s plavajočo vejico (vejica). Spremenljivka mora biti tipa float. |
7 | %a | Program pričakuje številko s plavajočo vejico (vejica). Spremenljivka mora biti tipa float. |
8 | %o | Program pričakuje osmiško število. Spremenljivka mora biti vrste int. |
9 | %s |
Program čaka na vnos niza. Niz je nabor vseh znakov do prvega ločilnega znaka. Spremenljivka mora biti vrste niz. |
10 | %x, %X | Program čaka na šestnajstiško število. Spremenljivka mora biti vrste int. |
11 | %p | Spremenljivka pričakuje vnos kazalca. Spremenljivka mora biti vrste kazalca. |
12 | %n | V spremenljivko zapiše celo število, ki je enako številu znakov, ki jih je doslej prebrala funkcija scanf. |
13 | %u | Program prebere nepodpisano celo število. Vrsta spremenljivke mora biti nepodpisano celo število. |
14 | %b | Program čaka na binarno številko. Spremenljivka mora biti vrste int. |
15 | % | Nabor skeniranih znakov. Program čaka na vnos znakov.iz omejenega bazena, navedenega v oglatih oklepajih. scanf bo deloval, dokler so v vhodnem toku znaki iz določenega niza. |
16 | %% | Podpiši "%". |
znaki v formatnem nizu
Simbol zvezdice ()
Zvezdica () je zastavica, ki označuje, da je treba operacijo dodelitve onemogočiti. Takoj za znakom "%" je postavljena zvezdica. Na primer,
scanf("%d%c%d", &x, &y); //prezri znak med dvema celima številkama. scanf("%s%d%s", str, str2); //prezri celo število med dvema nizoma.
To pomeni, da če v konzolo vnesete vrstico "45-20", bo program naredil naslednje:
- Spremenljivki "x" bo dodeljena vrednost 45.
- Spremenljivki "y" bo dodeljena vrednost 20.
- In znak minus (pomišljaj) "-" bo prezrt zahvaljujoč "%c".
Širina (ali širina polja)
To je celo število med znakom "%" in specifikatorjem formata, ki določa največje število znakov za branje v trenutni operaciji branja.
scanf("%20s", str); //preberi prvih 20 znakov iz vhodnega toka
Upoštevati je treba nekaj pomembnih stvari:
- scanf se bo končal, če naleti na ločilni znak, tudi če ni štel 20 znakov.
- Če je vnesenih več kot 20 znakov, bo samo prvih 20 znakov zapisanih v str.
Modifikatorjivrsta (ali natančnost)
To so posebne zastavice, ki spreminjajo vrsto podatkov, pričakovanih za vnos. Zastava je določena levo od specifikacije tipa:
- L ali l (majhno L) Ko se "l" uporablja s specifikacijami d, i, o, u, x, zastavica pove programu, da se pričakuje dolg vnos int. Ko uporabljate "l" s specifikacijo e ali f, zastavica pove programu, da naj pričakuje dvojno vrednost. Uporaba "L" pove programu, da se pričakuje dolg dvojnik. Uporaba "l" s specifikacijama "c" in "s" pove programu, da se pričakujejo dvobajtni znaki, kot je wchar_t. Na primer, "%lc", "%ls", "%l[asd]".
- h je zastava, ki označuje kratko vrsto.
- hh - označuje, da je spremenljivka kazalec na vrednost podpisanega ali nepodpisanega znaka. Zastavico lahko uporabite s specifikacijami d, i, o, u, x, n.
- ll (dve majhni L) - označuje, da je spremenljivka kazalec na vrednost tipa signed long long int ali unsigned long long int. Zastava se uporablja s specifikacijami: d, i, o, u, x, n.
- j - označuje, da je spremenljivka kazalec na tip intmax_t ali uintmax_t iz naslovne datoteke stdint.h. Uporablja se s specifikacijami: d, i, o, u, x, n.
- z - označuje, da je spremenljivka kazalec na tip size_t, katerega definicija je v stddef.h. Uporablja se s specifikacijami: d, i, o, u, x, n.
- t - označuje, da je spremenljivka kazalec na tip ptrdiff_t. Opredelitev nata vrsta je v stddef.h. Uporablja se s specifikacijami: d, i, o, u, x, n.
Bolj jasno, sliko z modifikatorji lahko predstavimo kot tabelo. Takšen opis scanf C za programerje bo bolj jasen.
Drugi znaki
Vsi znaki, ki jih najdemo v formatu, bodo zavrženi. Hkrati je treba opozoriti, da lahko prisotnost presledkov ali ločilnih znakov (nova vrstica, presledek, tabulator) v kontrolnem nizu povzroči drugačno obnašanje funkcije. V eni različici bo scanf() bral brez shranjevanja poljubnega števila ločil, dokler ne naleti na znak, ki ni ločilo, v drugi različici pa presledki (samo oni) ne igrajo vloge in izraz "%d + %d" je enakovredno "% d+%d".
Primeri
Oglejmo si nekaj primerov, ki vam bodo pomagali razmišljati in bolje razumeti, kako funkcija deluje.
scanf("%3s", str); //če v konzolo vnesete niz "1d2s3d1;3", bo v str scanf("%dminus%d", &x, &y) zapisano samo "1d2"; //minus znaki med dvema številkama bodo zavrženi scanf("%5[0-9]", str); // znaki bodo vneseni v str, dokler ni 5 znakov in znaki so številke od 0 do 9. scanf("%lf", &d); // pričakujte dvojni vnos scanf("%hd", &x); // pričakovano število vrste short scanf("%hu", &y); // pričakujte nepodpisano številko short scanf("lx", &z); //pričakovano število vrste long int
OdSpodnji primeri prikazujejo, kako se pričakovano število spreminja z različnimi simboli.
scanf C - opis za začetnike
Ta razdelek bo uporaben za začetnike. Pogosto morate imeti pri roki ne toliko popoln opis scanf C kot podrobnosti o delovanju funkcije.
- Ta funkcija je nekoliko zastarela. V knjižnicah različnih različic je več različnih izvedb. Na primer, izboljšana funkcija scanf S C, katere opis lahko najdete na spletnem mestu Microsoft.
- Število specifikacij v formatu se mora ujemati s številom argumentov, posredovanih funkciji.
- Elementi vhodnega toka morajo biti ločeni samo z ločilnimi znaki: presledek, tabulator, nova vrstica. Vejica, podpičje, pika itd. - ti znaki niso ločila za funkcijo scanf().
- Če scanf naleti na ločilni znak, bo vnos ustavljen. Če je za branje več spremenljivk, bo scanf prešel na branje naslednje spremenljivke.
- Najmanjša nedoslednost v formatu vhodnih podatkov vodi do nepredvidljivih rezultatov programa. No, če se program samo konča z napako. Toda pogosto program še naprej deluje in dela narobe.
- scanf("%20s …", …); Če vhodni tok presega 20 znakov, bo scanf prebral prvih 20 znakov in prekinil ali prešel na branje naslednje spremenljivke, če je ta podana. V tem primeru bo naslednji klic v scanf nadaljeval branje vhodnega toka od točke, kjer se je ustavilo delo prejšnjega klica scanf. Če ob branju prvih 20znakov, naleti na ločilni znak, bo scanf prekinil ali nadaljeval z branjem naslednje spremenljivke, tudi če za prvo spremenljivko ni prebral 20 znakov. V tem primeru bodo vsi neprebrani znaki pripeti naslednji spremenljivki.
- Če se nabor skeniranih znakov začne z "^", bo scanf prebral podatke, dokler ne naleti na ločilni znak ali znak iz nabora. Na primer, "%[^A-E1-5]" bo bral podatke iz toka, dokler ne zasledite enega od velikih angleških znakov od A do E ali ene od številk od 1 do 5.
- Funkcija scanf C, kot je opisano, vrne število, ki je enako uspešnemu številu zapisov v spremenljivke. Če scanf zapiše 3 spremenljivke, bo rezultat uspeha funkcije vrnil številko 3. Če scanf ne more zapisati nobene spremenljivke, bo rezultat 0. In končno, če se scanf iz nekega razloga sploh ne more zagnati, rezultat bo EOF.
- Če se je funkcija scanf() napačno končala. Na primer, scanf("%d", &x) - pričakovano je bilo število, vendar so bili znaki prejeti kot vhod. Naslednji klic scanf() se bo začel na točki v vhodnem toku, kjer se je končal prejšnji klic funkcije. Da bi premagali to težavo, se je treba znebiti težavnih znakov. To lahko storite na primer s klicem scanf("%s"). To pomeni, da bo funkcija prebrala niz znakov in ga zavrgla. Na ta zapleten način lahko nadaljujete z vnašanjem potrebnih podatkov.
- V nekaterih izvedbah scanf() "-" ni dovoljen v naboru skeniranih znakov.
- Označevalnik "%c" prebere vsak znak iz toka. To pomeni, da bere tudi ločilni znak. Če želite preskočiti ločilni znak in nadaljevati branje želenega znaka, lahko uporabite "%1s".
- Pri uporabi specifikatorja "c" je dovoljena uporaba širine "%10c", vendar je treba nato matriko elementov tipa char posredovati kot spremenljivko funkciji scanf.
- »%[a-z]« pomeni »vse male črke angleške abecede«, »%[z-a]« pa samo 3 znake: 'z', 'a', '-'. Z drugimi besedami, znak "-" pomeni obseg le, če je med dvema znakoma, ki sta v pravilnem vrstnem redu. Če je "-" na koncu izraza, na začetku ali v napačnem vrstnem redu znakov na obeh straneh, potem je to samo znak vezaj, ne obseg.
Sklep
To zaključuje opis scanf C. To je prijetna priročna funkcija za delo v majhnih programih in pri uporabi metode proceduralne programiranja. Vendar pa je glavna pomanjkljivost število nepredvidljivih napak, ki se lahko pojavijo pri uporabi scanf. Zato je opis scanf C pri programiranju najbolje imeti pred očmi. V velikih profesionalnih projektih se uporabljajo iostreami, saj imajo zmogljivosti na višji ravni, bolje so sposobni ujeti in obvladovati napake ter delati tudi s precejšnjo količino informacij. Opozoriti je treba tudi, da je opis scanf C v ruščini na voljo v številnih omrežnih virih, pa tudi primeri tegauporaba, zaradi starosti funkcije. Zato, če je potrebno, lahko vedno najdete odgovor na tematskih forumih.
Priporočena:
Proizvodne tehnologije: opis koncepta, razvoj, razvoj, funkcije
Pod izrazom "proizvodne tehnologije" obstajajo različne interpretacije. Pogosto je ta koncept povezan s težkim proizvodnim procesom, industrijo. Toda v resnici je tehnologija predvsem veščina, veščina, metode. Če prevedemo besedo "technos" iz grškega jezika, se odprejo dodatne možnosti za razlago tega koncepta: umetnost in logika. Posledično je proizvodna tehnologija skupek načinov, tehnik in metod za ustvarjanje izdelka, izdelka
Opis delovnega mesta skrbnika pisarne: dolžnosti, funkcije in pravice
Na večini javnih mest je prva oseba, ki jo srečate, takoj ko prestopite prag, receptor. Te strokovnjake najemajo hoteli, kozmetični saloni, restavracije in seveda pisarniške ustanove. Poverjene so jim številne odgovornosti, od komuniciranja z gosti in partnerji do obdelave dokumentacije
Vodične svetovne borze: opis in funkcije
Danes obstaja več kot 200 globalnih borz z različnimi ravnmi kapitalizacije. Dejavnosti opisanih finančnih institucij neposredno vplivajo na trg vrednostnih papirjev, rast gospodarstva posameznih držav in sveta kot celote. Vodilne svetovne borze določajo tempo razvoja borznega trga. Zato jih je vredno prebrati podrobneje
Šarapovo, sortirnica: kje je, opis, funkcije
Danes večina ljudi raje nakupuje prek spleta. Pakete dostavlja ruska pošta. Vsi gredo skozi poseben distribucijski center. Za mednarodno pošto je v Šarapovem sortirnica. Kje je, se bomo danes pogovarjali z vami
Sistem "Rapida": opis, funkcije in ocene
Plačilni sistem "Rapida" je univerzalna storitev. Njegove storitve so primerne tako za navadne uporabnike kot za lastnike podjetij. Razmislite o značilnostih platforme in o tem, kako poteka postopek registracije in identifikacije strank