Sa mirë është kur jepen të gjitha të dhënat, dhe asgjë nuk duhet të futet. Por, më besoni, kjo praktikisht nuk ndodh. Mos harroni shkollën, kur keni matur disa gjëra, dhe më pas vlerat e marra janë futur në formulat e nevojshme.
scanf
Në gjuhën C, përveç funksionit të daljes printf, ekziston edhe funksioni i skanimit për të dhëna. Këtu është funksioni i skanimit tani dhe ne do të hedhim një vështrim më të afërt:
int i;
scanf ("% d", & i);
Duket shumë e ngjashme me funksionin printf. Gjithashtu në thonjëza të dyfishta specifikuesi i formatit, por ndryshimi është në pjesën e dytë të funksionit. E keni vënë re pamjen e shenjës (&)? Pra, kjo shenjë nënkupton marrjen e adresës. Tani për tani unë do të shpjegoj pse kjo është e nevojshme.
Vlerën e futur duhet ta shkruajmë jo diku aty, por pikërisht në adresën në të cilën ndodhet ndryshorja jonë. ato. e panënshkruar (&) vlera jonë e futur do të shkojë në të gjitha vendet përveç asaj që na nevojitet. Prandaj, sa herë që duhet të futni vlera nga tastiera, vendosni një shenjë adrese (&) përpara variablit.
Specifikimi i formatit
Epo tani le të kalojmë specifikuesit e formatit:- % d - lexoni numrin e plotë
- % o - lexoni numrin oktal
- % x - lexoni një numër heksadecimal
- % e (% f) - lexoni numrin real
- % s - karakter i lexuar
- % s - lexoni rreshtin
int i;
scanf ("% d", & i);
int i;
scanf ("% o", & i);
int i;
scanf ("% x", & i);
noton t;
scanf ("% f", & t);
char ch;
scanf ("% c", & ch);
char * str ;;
scanf ("% s", str);
Mos u futni ende në punë me vargje. Pse nuk ka asnjë shenjë për marrjen e adresës? Ne do ta shqyrtojmë këtë temë pak më vonë.
Operacionet e krahasimit
Logjika Boolean fillimisht është e ngulitur në kompjuter, d.m.th. gjithçka është ndërtuar në 0 dhe 1. Nëse nuk e kuptoni se për çfarë bëhet fjalë, atëherë rishikoni filmin The Matrix, ku çdo mbrojtës i ekranit jeshil përbëhej nga këta dy numra magjikë.
Sigurisht, 0 dhe 1 janë të mira, por ne kemi nevojë për kuptim logjik, kështu që në operacionet boolean 0 është FALSE dhe 1 është TRUE. Këta koncepte E VËRTETË dhe E FALSE janë të lidhura ngushtë me operacionet e krahasimit... Për të filluar, këtu janë të gjitha llojet e operacioneve të krahasimit:
Në thelb, gabimi më i zakonshëm që bëjnë fillestarët është të ngatërrojnë operacionin me detyrën (=). operacion krahasimi(==). Këto janë gjëra krejtësisht të ndryshme. Por në fillim të kodimit, të gjithë kanë gabime pikërisht në këtë bazë, prandaj kini kujdes.
Ju lutemi pezulloni AdBlock në këtë sajt.
Le të kthehemi në listën e fundit të hapit të mëparshëm:
Listimi 1.
#përfshi
Detyra kryesore e këtij hapi është të mësoni se si të merrni të dhëna nga përdoruesi.
Për këtë mund të përdoret funksioni scanf. Ai, si funksioni printf, përshkruhet në skedarin e kokës stdio.h. Sepse e kemi të lidhur tashmë në rreshtin e parë, atëherë mund ta përdorim lirisht funksionin scanf në programin tonë.
Fig. 1. Sintaksë e përgjithshme për scanf.
Thomat e dyfishta tregojnë specifikuesin e formatit. Varësisht se në cilën variabël do të ruajmë vlerën e futur, duhet të përdorim specifikuesin e duhur të formatit.
Përcaktuesit bazë të formatit:
% d- numrat e plotë
% f- numri real i tipit float
% lf- një numër real i tipit të dyfishtë (shënimi lf nga notimi i gjatë)
% c- simbol
Vini re se funksioni scanf përdor specifikues të ndryshëm të formatit për llojet float dhe double.
Pas vargut të formatit, duhet të specifikoni adresën e ndryshores në të cilën dëshironi të ruani të dhënat. Për të treguar adresën e një ndryshoreje, mjafton që para emrit të shënoni shenjën & (ampersand), si në figurën e mësipërme.
Së fundi, le të shkruajmë një program për mbledhjen e dy numrave.
Listimi 2.
#përfshi
Përpiloni dhe ekzekutoni këtë program. Pas nisjes së programit, ai do të presë që ju të futni të dhëna. Ne e dimë se çfarë të dhënash duhet të futni, sepse ne kemi shkruar këtë program. Për përdoruesit e tjerë që nuk do ta shohin kodin e programit, do të ishte mirë të shfaqnin një sugjerim në ekran se cilat të dhëna duhet të futen. Shihni se si bëhet kjo në shembullin e mëposhtëm.
Ky program do të jetë i dobishëm për ata që monitorojnë shëndetin e tyre. Ky program llogarit normën tuaj bazë metabolike duke përdorur formulën Mifflin-Saint Geor bazuar në të dhënat që futni (mosha, gjatësia dhe pesha).
Listimi 3.
#përfshi
Në fakt, funksioni scanf është një funksion i hyrjes së formatit. Është pothuajse më kompleks se printf. Por t'i tregosh një fillestari për veçoritë e punës së saj do të thotë më kot ta ngarkosh atë me informacione të panevojshme. Në këtë fazë, kjo njohuri do të jetë e mjaftueshme për ju, dhe kur të bëhet e nevojshme të përdorni diçka më shumë, mund ta kuptoni vetë. Ose ndoshta do t'ju tregoj në ndonjë mësim.
Biblioteka standarde C / C ++ përfshin një numër funksionesh për lexim dhe shkrim në tastierë (tastierë dhe monitor). Këto funksione lexojnë dhe shkruajnë të dhëna si një rrjedhë e thjeshtë karakteresh.
Koncepti i një rryme (stream), i përdorur në programim, është i lidhur ngushtë me kuptimin e zakonshëm, të përditshëm të fjalës. Rrjedha hyrëse mund të krahasohet me një tub përmes të cilit uji (informacioni) hyn në pishinë (memoria e kompjuterit), rrjedha dalëse - me një tub përmes të cilit uji del nga pishina. Një tipar i rëndësishëm i këtij tubi është se të dhënat mund të lëvizin vetëm në një drejtim në të njëjtën kohë. Edhe nëse përdoret i njëjti tub për hyrje dhe dalje, kjo nuk mund të ndodhë në të njëjtën kohë: për të ndërruar drejtimin e rrjedhës, ai duhet të ndalet, duhet të kryhen disa veprime dhe vetëm atëherë rrjedha duhet të drejtohet në drejtim të kundërt. . Një veçori tjetër e rrjedhës është se pothuajse nuk thahet kurrë. Ndonjëherë thahet, por kjo periudhë nuk mund të jetë e gjatë nëse sistemi funksionon siç duhet.
Funksioni standard i daljes printf ()
Funksioni printf () është një funksion standard i daljes. Duke përdorur këtë funksion, ju mund të shfaqni një varg karakteresh, numër, vlerë të ndryshueshme ...
Funksioni printf () ka një prototip në skedarin stdio.h
int printf (char * varg kontrolli, ...);
Nëse është i suksesshëm, funksioni printf () kthen numrin e karaktereve të printuara.
Vargu i kontrollit përmban dy lloje informacioni: karaktere, të cilat printohen drejtpërdrejt në ekran dhe specifikues të formatit, të cilët përcaktojnë se si të shfaqen argumentet.
Funksioni printf () është një funksion dalës i formatuar. Kjo do të thotë që në parametrat e funksionit, duhet të specifikoni formatin e të dhënave që do të dalin. Formati i të dhënave tregohet nga specifikuesit e formatit. Specifikuesi i formatit fillon me një karakter% të ndjekur nga një kod formati.
Specifikimi i formatit:
%Me | simbol |
% d | numër i plotë dhjetor |
% i | numër i plotë dhjetor |
% e | numër dhjetor në formën x.xx e + xx |
% E | numër dhjetor në formën x.xx E + xx |
% f | |
% F | presje dhjetore lundruese xx.xxxx |
% g | % f ose% e, cilado qoftë më e shkurtër |
% G | % F ose% E, cilado qoftë më e shkurtër |
% o | numër oktal |
% s | varg karakteresh |
% u | numër dhjetor i panënshkruar |
% x | numër heksadecimal |
% X | numër heksadecimal |
%% | simboli % |
% fq | tregues |
% n | tregues |
Përveç kësaj, modifikuesit l dhe h mund të aplikohen për të formatuar komandat.
% ld | printim i gjatë int |
% hu | printim i shkurtër i panënshkruar |
% Lf | printim i gjatë i dyfishtë |
Në specifikuesin e formatit, një saktësi (numri i shifrave pas pikës dhjetore) mund të specifikohet pas simbolit %. Saktësia vendoset si më poshtë:% .n<код формата>... Ku n është numri i shifrave pas presjes dhjetore, dhe<код формата>- një nga kodet e dhëna më sipër.
Për shembull, nëse kemi një ndryshore x = 10.3563 të tipit float dhe duam të shfaqim vlerën e saj me saktësi deri në 3 shifra pas presjes dhjetore, atëherë duhet të shkruajmë:
printf ("Variable x =% .3f", x);
Rezultati:
Variabli x = 10.356
Ju gjithashtu mund të specifikoni kufirin minimal të printueshëm. Nëse rreshti ose numri është më i madh se gjerësia e fushës së specifikuar, atëherë shtypet i gjithë rreshti ose numri.
Për shembull, nëse shkruani:
printf ("% 5d", 20);
atëherë rezultati do të jetë si më poshtë:
20
Vini re se numri 20 nuk ishte shtypur që në fillim të rreshtit. Nëse dëshironi që hapësirat e papërdorura të fushës të mbushen me zero, atëherë duhet të vendosni karakterin 0 përpara gjerësisë së fushës.
Për shembull:
printf ("% 05d", 20);
Rezultati:
00020
Përveç specifikuesve të formatit të të dhënave, vargu i kontrollit mund të përmbajë karaktere kontrolli:
\ b | BS, vrima e poshtme |
\ f | Faqe e re, përkthim i faqes |
\ n | Linja e re, furnizimi i linjës |
\ r | Kthim ngarkese |
\ t | Skeda horizontale |
\ v | Skeda vertikale |
\" | Kuotim i dyfishtë |
\" | Apostrofë |
\\ | Vija e prapme |
\0 | Karakteri null, bajt null |
\ a | Sinjali |
\ N | Konstante oktale |
\ xN | Konstante heksadecimal |
\? | Pikëpyetje |
Më shpesh do të përdorni karakterin \ n. Me këtë karakter kontrolli do të jeni në gjendje të rreshtoni furnizimin. Shikoni programet mostër dhe do të kuptoni gjithçka.
Shembuj të programeve.
/ * Shembulli 1 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
int a, b, c; // Deklarimi i variablave a, b, c
a = 5;
b = 6;
c = 9;
printf ("a =% d, b =% d, c =% d", a, b, c);
}
Rezultati i programit:
a = 5, b = 6, c = 9
/ * Shembulli 2 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
noton x, y, z;
X = 10,5;
y = 130,67;
z = 54;
Printf ("Koordinatat e objektit: x:%. 2f, y:%. 2f, z:%. 2f", x, y, z);
}
Rezultati i programit:
Koordinatat e objektit: x: 10.50, y: 130.67, z: 54.00
/ * Shembulli 3 * /
#përfshi
kryesore e zbrazët ()
{
int x;
X = 5;
printf ("x =% d", x * 2);
}
Rezultati i programit:
x = 10
/ * Shembulli 4 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
printf ("\" Teksti në thonjëza \ "");
printf ("\ nPërmbajtja e oksigjenit: 100 %%");
}
Rezultati i programit:
"Teksti në thonjëza"
Përmbajtja e oksigjenit: 100%
/ * Shembulli 5 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
int a;
A = 11; // 11 dhjetore është e barabartë me b heksadecimal
printf ("a-dec =% d, a-hex =% X", a, a);
}
Rezultati i programit:
a-dec = 11, a-hex = b
/ * Shembulli 6 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
char ch1, ch2, ch3;
Ch1 = "A";
ch2 = "B";
ch3 = "C";
Printf ("% c% c% c", ch1, ch2, ch3);
}
Rezultati i programit:
ABC
/ * Shembulli 7 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
char * str = "Vargu im.";
Printf ("Kjo është% s", str);
}
Rezultati i programit:
Kjo është linja ime.
/ * Shembulli 8 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
printf ("Përshëndetje! \ n"); // Pas printimit, do të ketë një linjë të re - \ n
printf ("Emri im është Pavel."); // Kjo do të printohet në një rresht të ri
}
Rezultati i programit:
Përshëndetje!
Emri im është Pavel.
Funksioni standard i hyrjes Scanf ().
Funksioni scanf () është një funksion hyrës i formatuar. Me ndihmën e tij, ju mund të futni të dhëna nga një pajisje standarde hyrëse (tastierë). Të dhënat hyrëse mund të jenë numra të plotë, numra me pikë lundruese, karaktere, vargje dhe tregues.
Funksioni scanf () ka prototipin e mëposhtëm në skedarin stdio.h:
int scanf (char * varg kontrolli);
Funksioni kthen numrin e variablave të cilave u është caktuar një vlerë.
Vargu i kontrollit përmban tre lloje karakteresh: specifikuesit e formatit, hapësirat dhe karaktere të tjera. Përcaktuesit e formatit fillojnë me një% karakter.
Specifikimi i formatit:
Kur futni një varg duke përdorur funksionin scanf () (specifikuesi i formatit% s), vargu futet përpara hapësirës së parë !! ato. nëse futni rreshtin "Përshëndetje botë!" duke përdorur funksionin scanf ().
scanf ("% s", str);
pastaj pas futjes vargu që rezulton, i cili do të ruhet në grupin str, do të përbëhet nga një fjalë "Përshëndetje". FUNKSIONI SHQYRT NJË RINJË PARA HAPËSIRËS SË PARË! Nëse dëshironi të futni rreshta me hapësira, atëherë përdorni funksionin
char * merr (char * buf);
Me funksionin gets (), mund të futni vargje të plota. Funksioni gets () lexon karaktere nga tastiera derisa të shfaqet një karakter i linjës së re (\ n). Vetë karakteri i linjës së re shfaqet kur shtypni enter. Funksioni kthen një tregues në buf. buf është një bufer (memorie) për vargun hyrës.
Megjithëse gets () është jashtë qëllimit të këtij artikulli, le të shkruajmë një program shembull që ju lejon të futni një rresht të tërë nga tastiera dhe ta shfaqni atë në ekran.
#përfshi
kryesor i zbrazët (i zbrazët)
{
char buffer; // grup (buffer) për vargun hyrës
Merr (bufer); // futni një rresht dhe shtypni enter
printf ("% s", buffer); // shfaq rreshtin e futur në ekran
}
Një tjetër shënim i rëndësishëm! Për të futur të dhëna duke përdorur funksionin scanf (), duhet t'i kaloni si parametra adresat e variablave dhe jo vetë variablat. Për të marrë adresën e një ndryshoreje, duhet të vendosni shenjën & (shqip) përpara emrit të ndryshores. Shenja & nënkupton marrjen e një adrese.
Çfarë do të thotë adresa? Do të përpiqem të shpjegoj. Ne kemi një variabël në program. Një ndryshore ruan vlerën e saj në memorien e kompjuterit. Pra, adresa që marrim me & është adresa në memorien e kompjuterit ku ruhet vlera e ndryshores.
Le të hedhim një vështrim në një program shembull që na tregon se si të përdorim &
#përfshi
kryesor i zbrazët (i zbrazët)
{
int x;
Printf ("Fut ndryshoren x:");
scanf ("% d", & x);
printf ("Variable x =% d", x);
}
Tani le të kthehemi te linja e kontrollit scanf (). Përsëri:
int scanf (char * varg kontrolli);
Një karakter hapësinor në një linjë kontrolli udhëzon të kapërceni një ose më shumë hapësira në rrjedhën hyrëse. Përveç një hapësire, mund të perceptohet një skedë ose karakter i linjës së re. Një karakter jozero tregon leximin dhe heqjen e këtij karakteri.
Kufizuesit midis dy numrave të futur janë hapësira, skeda ose rreshti i ri. * pas% dhe para kodit të formatit (specifikuesi i formatit) udhëzon të lexoni të dhënat e llojit të specifikuar, por të mos caktoni këtë vlerë.
Për shembull:
scanf ("% d% * c% d", & i, & j);
duke shtypur 50 + 20 do të vendosë i në 50, j në 20 dhe + do të lexohet dhe injorohet.
Komanda e formatit mund të specifikojë gjerësinë më të madhe të fushës për t'u lexuar.
Për shembull:
scanf ("% 5s", str);
tregon nëse duhen lexuar 5 karakteret e para nga rryma hyrëse. Nëse futni 1234567890ABC, grupi str do të përmbajë vetëm 12345, pjesa tjetër e karaktereve do të shpërfillen. Ndarësit: hapësira, skeda dhe rreshti i ri - kur shtypen, ato trajtohen si të gjithë karakteret e tjera.
Nëse gjenden ndonjë karakter tjetër në vargun e kontrollit, ato synojnë të identifikojnë dhe të kalojnë karakterin përkatës. Rrjedha e karaktereve 10 plus 20 nga operatori
scanf ("% dplus% d", & x, & y);
do të vendosë x në 10, y në 20 dhe do të kapërcejë karakteret plus sepse ato shfaqen në vijën e kontrollit.
Një nga veçoritë e fuqishme të funksionit scanf () është aftësia për të specifikuar një grup skaner. Grupi i kërkimit përcakton grupin e karaktereve me të cilin do të krahasohen karakteret e lexuara nga funksioni scanf (). Funksioni scanf () lexon karakteret për aq kohë sa ato ndodhin në grupin e kërkimit. Sapo karakteri që futet nuk shfaqet në grupin e kërkimit, scanf () vazhdon te specifikuesi tjetër i formatit. Grupi i kërkimeve përcaktohet nga një listë karakteresh të mbyllura në kllapa katrore. Një kllapa e hapur paraprihet nga një shenjë %. Le ta shohim këtë me një shembull.
#përfshi
kryesor i zbrazët (i zbrazët)
{
char str1, str2;
scanf ("%% s", str1, str2);
printf ("\ n% s \ n% s", str1, str2);
}
Le të prezantojmë një grup simbolesh:
12345abcdefg456
Në ekran, programi do të shfaqë:
12345
abcdefg456
Kur specifikoni një grup kërkimesh, mund të përdorni gjithashtu karakterin vizë për të specifikuar hapësirën, si dhe gjerësinë maksimale të fushës së hyrjes.
scanf ("% 10", str1);
Ju gjithashtu mund të përcaktoni karaktere që nuk përfshihen në grupin e kërkimit. I pari prej këtyre karaktereve paraprihet nga një ^. Kompleti i karaktereve bën dallimin midis shkronjave të vogla dhe të mëdha.
Më lejoni t'ju kujtoj se kur përdorni funksionin scanf (), duhet t'i kaloni adresat e variablave në të si parametra. Kodi i mësipërm ishte shkruar:
char str; // një grup prej 80 karakteresh
scanf ("% s", str);
Vini re se str nuk paraprihet nga &. Kjo ndodh sepse str është një grup, dhe emri i grupit, str, është një tregues për elementin e parë të grupit. Prandaj, shenja & nuk përdoret. Tashmë po e kalojmë adresën në scanf (). E thënë thjesht, str është adresa në kujtesën e kompjuterit ku do të ruhet vlera e elementit të parë të grupit.
Shembuj të programeve.
Shembulli 1.
Ky program shfaq pyetjen "Sa vjeç je?:" dhe pret që të futen të dhënat. Nëse, për shembull, futni numrin 20, programi do të shfaq rreshtin "Ju jeni 20 vjeç". Kur thërrasim funksionin scanf (), vendosim shenjën & përpara ndryshores moshe, pasi funksioni scanf () ka nevojë për adresat e variablave. Funksioni scanf () do të shkruajë vlerën e futur në adresën e specifikuar. Në rastin tonë, vlera e futur 20 do të shkruhet në adresën e moshës së ndryshueshme.
/ * Shembulli 1 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
mosha int;
Printf ("\ nsa vjeç jeni?:");
scanf ("% d", & mosha);
printf ("Ju jeni% d vjeç.", mosha);
}
Shembulli 2.
Programi llogaritës. Ky kalkulator mund të shtojë vetëm numra. Nëse vendosni 100 + 34, programi do të japë rezultatin: 100 + 34 = 134.
/ * Shembulli 2 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
int x, y;
Printf ("\ nLlogaritësi:");
scanf ("% d +% d", & x, & y);
printf ("\ n% d +% d =% d", x, y, x + y);
}
Shembulli 3.
Ky shembull tregon se si të vendosni gjerësinë e leximit. Në shembullin tonë, gjerësia e fushës është pesë karaktere. Nëse futni një varg me një numër të madh karakteresh, atëherë të gjithë karakteret pas 5-tës do të hidhen poshtë. Vini re thirrjen e funksionit scanf (). Shenja & nuk i paraprin emrit të grupit sepse emri i grupit është adresa e elementit të parë në grup.
/ * Shembulli 3 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
emri char;
Printf ("\ nFutni emrin tuaj të përdoruesit (jo më shumë se 5 karaktere):");
scanf ("% 5s", emri);
printf ("\ nKeni futur% s", emrin);
}
Shembulli 4.
Shembulli i fundit në këtë artikull tregon se si mund të përdorni kërkime të shumta. Pas fillimit të programit, vendosni një numër nga 2 në 5.
/ * Shembulli 4 * /
#përfshi
kryesor i zbrazët (i zbrazët)
{
char bal;
Printf ("Vlerësimi juaj është 2,3,4,5:");
scanf ("%", & bal);
printf ("\ nVlerësimi% c", bal);
}
Funksioni scanf () është një rutinë hyrëse për qëllime të përgjithshme që lexon të dhëna nga transmetimi stdin. Mund të lexojë të dhëna të të gjitha llojeve bazë dhe t'i konvertojë ato automatikisht në formatin e brendshëm të dëshiruar. Nëse printf () po bënte hyrje dhe jo dalje, mund të quhej një analog i scanf ().
Vargu i kontrollit i treguar sipas formatit përbëhet nga tre lloje karakteresh:
- Specifikimi i formatit
- Simbole të veçanta
- Personazhe të tjerë (jo të veçantë)
Përcaktuesit e formatit ndjekin karakterin përqindje dhe i tregojnë scanf () se çfarë lloji të të dhënave të lexojë më pas. Kodet e specifikuesit janë paraqitur në tabelë.
Kodi | Kuptimi |
---|---|
%Me | Numëroni një personazh |
% d | |
% i | Lexoni numrin e plotë dhjetor |
% e | |
% f | Lexoni numrin me pikë lundruese |
% g | Lexoni numrin me pikë lundruese |
%O | Numëroni numrin oktal |
% s | Lexoni rreshtin |
%X | Lexoni numrin heksadecimal |
%R | Lexoni treguesin |
% n | Pranon një vlerë të plotë të barabartë me numrin e karaktereve të lexuara deri në momentin aktual |
% u | Lexon një numër të plotë të panënshkruar |
% | Kërkon një grup karakteresh |
%% | Lexon karakterin % |
Për shembull,% s lexon një varg dhe% d lexon një ndryshore numër të plotë.
Vargu i formatit lexohet nga e majta në të djathtë, duke bërë një hartë midis kodeve të formatit dhe argumenteve nga lista e argumenteve.
Karakteret speciale në vargun e kontrollit bëjnë që scanf () të kapërcejë një ose më shumë karaktere speciale në rrjedhën hyrëse. Karakteret speciale janë hapësira, skeda ose rreshti i ri. Një karakter i vetëm i veçantë në një linjë kontrolli bën që scanf () të lexojë, pa mbajtur mend, ndonjë numër (përfshirë zero) të karaktereve speciale të njëpasnjëshme nga rrjedha hyrëse, derisa të ndeshet një karakter jo i veçantë.
Prania e një karakteri të rregullt bën që scanf () të lexojë dhe të heqë karakterin përkatës. Për shembull, "% d,% d" bën që scanf () të lexojë një numër të plotë, të lexojë dhe të heqë presjen dhe më pas të lexojë një numër tjetër të plotë. Nëse karakteri i specifikuar nuk gjendet në rrjedhën hyrëse, scanf () ndalon.
Të gjitha variablat e përdorur për të marrë vlera duke përdorur funksionin scanf () duhet të kërkohen nga adresat e tyre. Kjo do të thotë që të gjitha argumentet e funksionit duhet të jenë tregues drejt variablave. Kështu, C bën të mundur kalimin me referencë, dhe kjo lejon funksionin të ndryshojë përmbajtjen e argumentit.
Scanf ("% d", & count);
Vargjet lexohen në vargje karakteresh dhe emri i grupit, pa asnjë tregues, është adresa e elementit të parë në grup. Prandaj, për të lexuar një varg në grupin e karaktereve të adresës, mund të përdorni komandën
Scanf ("% s", adresa);
Në këtë rast, adresa e emrit është tashmë një tregues dhe nuk ka nevojë për prefiksin &.
Artikujt e të dhënave hyrëse duhet të ndahen me hapësira, skeda ose rreshta të rinj.
Karakteret e pikësimit si presja, pikëpresja etj. nuk konsiderohen si kufizues. Kjo do të thotë se për operatorin
Scanf ("% d% d", & r, & c);
Sekuenca 10 20 do të pranohet, por sekuenca 10.20 jo. Përcaktuesit e formatit scanf () janë në të njëjtin rend si variablat në listën e argumenteve të cilave u janë caktuar vlerat e variablave të marra.
* pas% dhe para specifikuesit të formatit lexon të dhëna të llojit të specifikuar, por shtyp caktimin. Pra kodi
Scanf ("% d% * c% d", & x, & y);
Kur futni sekuencën, 10/20 cakton 10 në x, hedh poshtë / dhe cakton 20 për y.
Komandat e formatimit mund të vendosin modifikuesin e gjerësisë maksimale të fushës. Është një numër i plotë që vendoset midis shenjës % dhe specifikuesit të formatit. Kufizon numrin e karaktereve të lexuara për çdo fushë. Për shembull, nëse duhet të lexoni jo më shumë se 20 karaktere në grupin e adresave, do të shkruani
Scanf ("% 20s", adresa);
Nëse transmetimi i hyrjes përmban më shumë se 20 karaktere, atëherë në një telefonatë pasuese, funksioni i hyrjes do të nisë hyrjen nga pika ku hyrja u ndal gjatë thirrjes aktuale. Futja e fushës mund të ndërpritet përpara se të arrihet gjatësia maksimale e fushës nëse haset një bosh. Në këtë rast scanf () kalon në fushën tjetër.
Megjithëse hapësirat, skedat dhe vijat e reja përdoren si ndarës të fushave, ato lexohen si çdo karakter tjetër kur futet një karakter i vetëm. Për shembull, duke pasur parasysh një rrymë hyrëse x y, funksioni
Scanf ("% c% c% c", & a, & b, & c);
Do të vendos karakterin x në ndryshoren a, hapësirën - në ndryshoren b dhe y - në ndryshoren c.
Kini kujdes: çdo karakter tjetër në linjën e kontrollit - duke përfshirë hapësirat, skedat dhe rreshtat e rinj - përdoren për të specifikuar dhe hequr karakteret nga rrjedha e hyrjes. Për shembull, për një rrymë hyrëse prej 10t20, funksioni
Scanf ("% st% s", & x, & y);
Vendet 10 në x dhe 20 në y. T do të hidhet poshtë sepse ka një t në linjën e kontrollit.
Një veçori tjetër e funksionit scanf () quhet skanime të shumëfishta. Seti i skanimit përcakton karakteret që do të lexohen nga funksioni scanf () dhe do t'u caktohen elementeve të grupit përkatës të karaktereve. Për të specifikuar një grup skanimesh, duhet të vendosni karakteret, të cilat janë të vlefshme, në kllapa katrore. Kllapa e parë katrore paraprihet nga një shenjë përqindjeje. Për shembull, lista e mëposhtme e grupeve të skanimit specifikon që scanf () lexon vetëm karakteret A, B dhe C:
Argumenti që korrespondon me listën e grupit të skanimit duhet të jetë një tregues për një grup karakteresh. Kur përdorni skanime të shumta, funksioni scanf () lexon karakteret dhe i vendos ato në grupin e specifikuar derisa të haset një karakter që nuk përfshihet në grupin e skanimit (d.m.th., lexohen vetëm karakteret e përfshira në grupin e skanimit).
Vargu i kthyer nga scanf () do të përmbajë një varg të përfunduar me null. Lista e simboleve të lexueshme mund të vendoset edhe në formë të kundërt. Për ta bërë këtë, vendosni ^ si karakterin e parë. Pastaj scanf () do të pranojë çdo karakter që nuk përfshihet në grupin e skanimit.
Duke përdorur thonjëza, mund të specifikoni gamën e karaktereve që do të interpretohen. Për shembull, shprehja e mëposhtme udhëzon scanf () të pranojë shkronjat A deri në Z:
Shumë skanime bëjnë dallimin midis shkronjave të mëdha dhe të vogla. Nëse dëshironi që scanf () t'i pranojë të dyja, duhet t'i renditni veçmas në grupin e skanimeve.
Funksioni scanf () kthen një numër të barabartë me numrin e fushave, vlerat e të cilave në fakt u janë caktuar variablave. Ky numër nuk përfshin fushat që janë lexuar, por vlerat e tyre nuk janë caktuar për asgjë për shkak të përdorimit të modifikuesit * për të shtypur detyrën. Nëse ndodh një gabim përpara caktimit të një vlere në fushën e parë, EOF kthehet.
Kur përdorni Borland C ++ në një mjedis 16-bitësh, mund të ndryshoni modelin e paracaktuar të memories për përpilimin e programit tuaj duke specifikuar në mënyrë eksplicite madhësinë e secilit tregues të përdorur kur thërrisni scanf (). Treguesi i afërt specifikohet nga modifikuesi N dhe treguesi larg specifikohet nga modifikuesi F (Nuk mund të përdorni modifikuesin N nëse programi është përpiluar për modelin e memories së madhe.)
] SCANF #përfshi