Scanf C funkcija: opis. §1 Opće informacije o jeziku

1. Uvod

Programiranje zahtijeva nove univerzalne algoritamske modele, a hardver implementira algoritme ne samo u drugačijem obliku, već i na temelju drugačijeg algoritamskog modela - automata. Posuđivanje tehnologije iz razvoja hardvera ključna je ideja iza programiranja automata. Međutim, sinteza digitalnih uređaja razlikuje se od programiranja. Ali kod posuđivanja modela, s jedne strane, nije preporučljivo bitno ga mijenjati, as druge strane, ne može se zanemariti već postojeća teorija i praksa programiranja.

Zatim ćemo se osvrnuti na SWITCH tehnologiju za dizajniranje automatskih programa, u kojoj se stalno susrećete sa sličnim procesima. S jedne strane, toliko je promijenio model konačnog stroja da ga je zapravo izveo izvan dosega teorije automata. A, s druge strane, u programiranje uvodi koncepte koji su programerima teško shvatljivi, a ponekad su jednostavno suvišni, jer postoje poznatiji analozi iz teorije programa i prakse programiranja.

Kao temelj za raspravu o problemima automatskog programiranja uzet ćemo nedavno predavanje Shalyto A.A. i njegovih članaka o “programiranju” prema definiciji paradigme automatskog programiranja.

C++ programski jezik

Zadnja izmjena: 28.08.2017

Programski jezik C++ je kompilirani programski jezik visoke razine Opća namjena statički tipiziran, što je prikladno za izradu raznih aplikacija. Danas je C++ jedan od najpopularnijih i najraširenijih jezika.

Ima svoje korijene u jeziku C koji je 1969-1973 u Bell Labsu razvio programer Dennis Ritchie. Početkom 1980-ih, danski programer Bjarne Stroustrup, koji je tada radio u Bell Labsu, razvio je C++ kao proširenje jezika C. Zapravo, u početku je C++ jednostavno nadopunio jezik C s nekim mogućnostima objektno orijentiranog programiranja. I zato ga je sam Stroustrup u početku nazvao "C s klasama".

Naknadno novi jezik počeo stjecati popularnost. Dodane su mu nove značajke koje ga nisu učinile samo dodatkom C-u, već potpuno novim programskim jezikom. Kao rezultat toga, "C s klasama" je preimenovan u C++. I od tada su se oba jezika počela razvijati neovisno jedan o drugom.

C++ je moćan jezik koji nasljeđuje bogate memorijske mogućnosti od C-a. Stoga se C++ često koristi u sistemskom programiranju, posebno pri izradi operativnih sustava, upravljačkih programa, raznih uslužnih programa, antivirusa itd. Usput, Windows OS je uglavnom napisan u C++. Ali samo aplikacija za programiranje sustava ovog jezika nije ograničeno. C++ se može koristiti u programima bilo koje razine gdje su brzina i performanse važni. Često se koristi za stvaranje grafičke aplikacije, razni aplikacijski programi. Također se posebno često koristi za stvaranje igara s bogatom, bogatom vizualizacijom. Osim toga, u posljednje vrijeme sve više uzima maha mobilni smjer, gdje je svoju primjenu našao i C++. Čak i u web razvoju, možete također koristiti C++ za stvaranje web aplikacija ili nekih pratećih usluga koje služe web aplikacijama. Općenito, C++ je široko korišten jezik u kojem možete izraditi gotovo sve vrste programa.

C++ je prevedeni jezik, što znači da prevodilac prevodi izvor u C++ izvršna datoteka, koji sadrži skup strojnih uputa. Ali različite platforme imaju svoje karakteristike, tako da se kompilirani programi ne mogu jednostavno prenijeti s jedne platforme na drugu i tamo pokrenuti. Međutim, na razini izvornog koda, C++ programi su uglavnom prenosivi osim ako se ne koriste neke funkcije specifične za OS. A dostupnost kompilatora, biblioteka i razvojnih alata za gotovo sve uobičajene platforme omogućuje vam kompajliranje istog C++ izvornog koda u aplikacije za te platforme.

Za razliku od C-a, jezik C++ omogućuje vam pisanje aplikacija u objektno orijentiranom stilu, predstavljajući program kao skup klasa i objekata koji međusobno djeluju. Što pojednostavljuje izradu velikih aplikacija.

Glavne faze razvoja

Godine 1979.-80. Bjarne Stroustrup razvio je proširenje jezika C - "C s klasama". Godine 1983. jezik je preimenovan u C++.

Godine 1985. objavljena je prva komercijalna verzija jezika C++, kao i prvo izdanje knjige "The C++ Programming Language", koja je predstavljala prvi opis ovog jezika u nedostatku službenog standarda.

Objavljen je 1989 nova verzija C++ 2.0 jezik, koji uključuje niz novih značajki. Nakon toga, jezik se razvijao relativno sporo do 2011. Ali u isto vrijeme, 1998. godine, napravljen je prvi pokušaj standardizacije jezika od strane organizacije ISO (International Organisation for Standardization). Prvi standard zvao se ISO/IEC 14882:1998 ili skraćeno C++98. Nakon toga, 2003. godine, objavljena je nova verzija standarda C++03.

2011. objavljena je novi standard C++11, koji je sadržavao mnoge dodatke i obogatio jezik C++ velikim brojem novih funkcionalnosti. Nakon toga, mali dodatak standardu, također poznat kao C++14, objavljen je 2014. Još jedno ključno izdanje jezika zakazano je za 2017.

Kompajleri i razvojna okruženja

Za razvoj programa u C++-u potreban vam je kompajler - on prevodi izvorni kod u C++-u u izvršnu datoteku koju zatim možete pokrenuti. Ali u ovom trenutku postoji mnogo različitih prevoditelja. Mogu se razlikovati u različitim aspektima, posebice u provedbi standarda. Osnovni popis kompilatora za C++ može se pronaći na Wikipediji. Preporuča se za razvoj odabrati one prevoditelje koji razvijaju i implementiraju sve najnovije standarde. Stoga ćemo kroz ovaj vodič primarno koristiti besplatno dostupni g++ prevodilac koji je razvio GNU projekt.

Također možete koristiti IDE kao što su Visual Studio, Netbeans, Eclipse, Qt itd. za izradu programa.

Učenje osnova i zamršenosti programskog jezika C++. Udžbenik s praktičnim zadacima i testovima. Želite li naučiti programirati? Onda ste na pravom mjestu - ovdje je besplatna obuka programiranja. Bez obzira jeste li iskusni ili ne, ove lekcije programiranja pomoći će vam da počnete stvarati, kompilirati i otklanjati pogreške u C++ programima u raznim razvojnim okruženjima: Visual Studio, Code::Blocks, Xcode ili Eclipse.

Puno primjera i detaljnih objašnjenja. Savršen i za početnike (dummy) i za one naprednije. Sve je objašnjeno od nule do detalja. Ove lekcije (200+) dat će vam dobru osnovu/temelj za razumijevanje programiranja ne samo u C++, već iu drugim programskim jezicima. I to potpuno besplatno!

Također u obzir korak po korak stvaranje igre u C++, SFML grafička biblioteka i više od 50 zadataka za testiranje vaših vještina i znanja u C++. Dodatni bonus je.

Za ponovno objavljivanje +20 na karmu i moju zahvalnost!

Poglavlje br. 0. Uvod. Početak rada

Poglavlje br. 1. Osnove C++

Poglavlje br. 2. Varijable i osnovni tipovi podataka u C++

Poglavlje br. 3. Operatori u C++

Poglavlje br. 4. Opseg i druge vrste varijabli u C++

Poglavlje br. 5. Redoslijed kojim se kôd izvršava u programu. Petlje i grananja u C++

Računala su možda najsvestraniji alati koje čovječanstvo ima na raspolaganju. Sposobni su izvoditi nevjerojatne izračune, omogućuju pohranjivanje ogromne količine informacija, potpuno različitih dijelova planeta, a pritom ih lako razmjenjuju, bez obzira na lokaciju. Računala olakšavaju mnoge svakodnevne poslove i omogućuju automatizaciju mnogih rutinskih procesa koji bi čovjeku bili vrlo zamorni i dosadni. Postoji toliko mnogo stvari koje računala mogu učiniti, ali unatoč tome, računala nemaju inteligenciju, za razliku od ljudi. Da biste automatizirali i najjednostavniji proces, morate jasno i nedvosmisleno reći računalu što točno treba učiniti. Nažalost, naš jezik i računalni jezik potpuno su različiti. Dakle, između stroja i osobe postoji ozbiljna jezična barijera koja se mora nekako prevladati, inače nas računalo neće razumjeti. I sve dok nas računala ne razumiju, neće učiniti ništa sama. Ogroman broj programskih jezika je izumljen kao sredstvo komunikacije između osobe i računala. Uz pomoć programskih jezika stvaramo programe i računalo direktno radi s programima. Sami programi su skupovi instrukcija koje računalo može razumjeti i izvršiti.

Vrste programa

Kako bismo mogli učinkovito komunicirati s računalom, a to je ono što želimo, postoji širok raspon programskih jezika.

Ovisno o vrsti projekta, postoje mnogi čimbenici koje treba uzeti u obzir pri odabiru programskog jezika. Evo popisa najznačajnijih čimbenika:

Kompilacija, interpretacija i JIT kompilacija

Proces kompilacije prevodi kod napisan u programskom jeziku u materinji jezik ciljnog stroja. Program koji izvodi ovaj proces naziva se kompajler. Kompilacija može pokrenuti kod prilično brzo, osobito ako je kompilator učinkovit u optimizaciji. Ali činjenica je da dobiveni kod ne može raditi drugačije operativni sustavi, a proces kompilacije traje neko vrijeme, a što je više koda, to je proces kompilacije dulji. Vrijedno je napomenuti da je kod bilo kakvih promjena u programskom kodu potrebno isti prevesti i tek onda pokrenuti.

Interpretirani programski jezici čitaju se pomoću programa koji se zove tumač i izvršavaju isti program. Interpretirani programski jezici mogu se izvoditi na različitim operativnim sustavima, baš kao i interpreter, a nemaju čak ni dugo vrijeme kompilacije. Ali programi napisani korištenjem interpretiranih jezika obično rade mnogo sporije od ekvivalentnih, prevedenih programa.

I na kraju, tzv. on-the-fly kompilacija (ili JIT kompilacija). Takvi se jezici brzo kompajliraju u trenutku pokretanja programa. Programi napisani u JIT jezicima u pravilu nisu optimizirani, čime se ubrzava proces kompilacije i uspostavlja ravnoteža između performansi i kompatibilnosti s više platformi.

Visoke ili niske razine programiranja

Jezici niske razine uglavnom rade izravno s hardverom i stoga su najprikladniji za pisanje upravljačkih programa uređaja. Upravljački programi su programi koji kontroliraju hardver i imaju izravan pristup njemu. Međutim, program napisan na jeziku niske razine obično je teško prenijeti na druge platforme. Stoga, za svaki OS, isti uređaj dolazi s različitim upravljačkim programima. Programski jezici niske razine gotovo se uvijek kompiliraju.

U jezicima visoka razina težište je na konceptu jezika. To jest, takav programski jezik trebao bi biti lak za razumijevanje, kao što je predstavljanje podataka kao nizova, nizova, objekata, itd. Jezik visoke razine obično je lakše razumjeti nego jezik niske razine. I, u pravilu, razvijanje programa na jeziku visoke razine puno je lakše i brže nego na jeziku niske razine. Kao što vidiš, različite razine programski programi dizajnirani su za potpuno različite zadatke i nema smisla uspoređivati ​​funkcionalnost jezika na različitim razinama, besmisleno je.

Programski jezik Sustavi tipova podataka

Za svaki programski jezik postoji specifikacija koja definira različita pravila koja programski jezici moraju slijediti. Neki jezici nemaju tipove podataka, pa se ovo ne odnosi na njih. Međutim, većina jezika (uključujući C++) ima tipove podataka, tako da će vam ove informacije biti korisne.

Jak ili slab sustav tipa podataka

Slab ulazni sustav ne nameće nikakva ograničenja; programer to mora pratiti. Kad kažem "slab podatkovni sustav", mislim na to da jezik s takvim podatkovnim sustavom ne regulira striktno dostupne vrste podataka. Na primjer, ako funkciji množenja proslijedite niz ili simbol umjesto broja, programski jezici koji nisu striktno tipizirani izvršit će takav kod, iako rezultat množenja gubi svako značenje, budući da se niz ne može pomnožiti s broj. Štoviše, rezultat izvođenja ovog besmislenog množenja bit će nepredvidiv. Ako je programski jezik strogo tipiziran, tada će u fazi kompilacije prevoditelj prijaviti pogrešku i zaustaviti proces izgradnje projekta. Na primjer,

// primjer programa u C++ #include korištenje imenskog prostora std; int main())( char string = "primjer"; int broj = 5; cout<< string * number << endl; // умножаем строку на число }

Kao rezultat toga, kompajler će prijaviti pogrešku:

pogreška: nevažeći operandi tipa 'char' i 'int' u binarni 'operator*'

Pokušat ćemo učiniti isto u programskom jeziku koji nije strogo tipiziran - php. Imajte na umu da čak i kada deklarirate varijable, ne morate navesti vrstu podataka.

Rezultat izvršavanja ovog koda bit će nula. Neće se dogoditi nikakva pogreška, iako se čini da ne možete pomnožiti niz s brojem. Ali u PHP-u je sve moguće. PHP prevodilac jezika neće prijaviti pogrešku, skripta će raditi i čak proizvesti rezultat, a ako se naš program sastoji od 1000 redaka koda, teško ćemo pronaći ovu pogrešku. Ovo je živopisan primjer programskog jezika sa "slabim sustavom tipova podataka", odnosno sprječavanje takvih apsurdnih operacija u potpunosti leži na plećima programera.

Definirani ili nedefinirani tip podataka

Ovo se odnosi i na prevedene i na interpretirane jezike. Mnogi jezici zahtijevaju eksplicitnu definiciju vrste varijabli, tako da nema nesigurnosti, prevodilac i tumač jasno znaju što trebaju učiniti. Neki programski jezici ne zahtijevaju eksplicitnu definiciju tipa varijabli. Vrsta podataka se određuje automatski na temelju sadržaja varijable.

Statički ili dinamički tip podataka

Ako je jezik statički tipiziran, tada kompilator/interpretator provjerava tip jednom prije procesa kompilacije/interpretacije. Ako je tip podataka dinamički, tada se tipovi podataka provjeravaju tijekom izvođenja.

Siguran ili nesiguran sustav tipa podataka

Mogu postojati situacije koje mogu dovesti do neočekivanih rezultata ili pogrešaka. Siguran jezik će uvesti što više ograničenja kako bi se osiguralo da takve situacije ne bi dolazile. Dok nesiguran jezik svu odgovornost stavlja na programera.

Ovi čimbenici mogu karakterizirati jedan ili više programskih jezika.

Podržane programske paradigme

Paradigme programiranja su metodologije ili načini programiranja koje programski jezik podržava. Evo popisa glavnih paradigmi:

Deklarativna paradigma

Deklarativni programski jezik više će naglasak staviti na cilj nego na sredstva za postizanje tog cilja. Dovoljno je naznačiti što treba postići, ali nije potrebno naznačiti koja sredstva koristiti. Ova paradigma sprječava neželjene nuspojave koje se mogu pojaviti prilikom pisanja vlastitog koda.

Funkcionalna paradigma

Funkcionalno programiranje je podskup deklarativnog programiranja koji pokušava riješiti probleme u smislu matematičkih jednadžbi i funkcija. Funkcionalno programiranje tretira varijable i objekte kao podatke koji se ne dijele, za razliku od imperativnih jezika.

Generalizirana paradigma

Generičko programiranje usmjereno je na pisanje algoritama u smislu tipova podataka koje treba definirati. Odnosno, isti algoritam može raditi s različitim vrstama podataka. Ovaj pristup može biti vrlo moćan alat, ali samo ako se dobro provodi.

Imperativnu paradigmu

Imperativni jezici omogućuju programerima da računalu daju uređen popis uputa koje su potrebne za dovršenje zadatka. Imperativni programski jezici suprotstavljeni su deklarativnim programskim jezicima.

Strukturna paradigma

Strukturni programski jezici imaju za cilj pružiti neki oblik koda - hijerarhijsku strukturu. Kada je struktura koda jasno vidljiva, redoslijed kojim se iskazi izvode postaje intuitivno jasan. Takvi jezici obično obeshrabruju “skakanje” s jednog dijela koda na drugi, na primjer, goto operator koji nam je svima poznat, a koji je definiran u jezicima C i C++.

Proceduralna paradigma

Proceduralni programski jezik odnosi se na strukturirane programske jezike koji podržavaju koncept procedure ili potprograma.

Objektno orijentirana paradigma

Objektno orijentirano programiranje (ponekad skraćeno OOP) je podskup strukturiranog programiranja koji izražava programe u terminima "objekata". Ova paradigma dopušta ponovnu upotrebu koda, a ovaj je pristup vrlo lako razumjeti.

Standardizacija

Imaju li jezici službeni standard? Standardizacija je vrlo važna kako bi se osiguralo razumijevanje programa bez sukoba od strane različitih prevoditelja/tumača. Neki jezici standardizirani su od strane Američkog nacionalnog instituta za standarde (ANSI), drugi su standardizirani od strane Međunarodne organizacije za standardizaciju (ISO). Svi programski jezici moraju biti standardizirani, inače neće biti dogovora o tome što je ispravno, a što netočno u sintaksi.

Okarakterizirajmo programski jezik C++

Sada kada smo ispitali glavne karakteristike programskih jezika, odredimo koje čimbenike programski jezik C++ zadovoljava.

C++ je ISO standardizirani programski jezik.

Neko vrijeme C++ nije imao službenu normu, no od 1998. C++ je standardiziran od strane ISO odbora.

C++ kompilirani jezik.

C++ se kompajlira izravno u strojni kod, što ga čini jednim od najbržih jezika na svijetu.

C++ je strogo tipiziran jezik.

C++ pretpostavlja da programer zna što radi, te dopušta nevjerojatan broj mogućnosti, ograničenih samo maštom.

C++ podržava statičke i dinamičke tipove podataka.

Stoga se provjera tipa podataka može obaviti tijekom kompajliranja ili tijekom izvođenja. I ovo još jednom dokazuje fleksibilnost C++-a.

C++ podržava mnoge paradigme.

C++ podržava proceduralne, generičke i objektno orijentirane programske paradigme, te mnoge druge paradigme.

C++ je prenosivi programski jezik.

Kao jedan od najčešće korištenih jezika u svijetu i kao otvoreni jezik, C++ ima širok raspon kompilatora koji rade na različitim platformama. Kôd standardne biblioteke C++ izvodit će se na mnogim platformama.

C++ je potpuno kompatibilan s jezikom C

U C++-u možete koristiti C biblioteke i one će ispravno raditi.

Standardna biblioteka C/C++ uključuje niz funkcija za čitanje i pisanje na konzoli (tipkovnica i monitor). Ove funkcije čitaju i pišu podatke kao jednostavan tok znakova.

Koncept toka, koji se koristi u programiranju, usko je povezan s uobičajenim, svakodnevnim razumijevanjem ove riječi. Ulazni tok se može usporediti s cijevi kroz koju voda (informacije) ulazi u bazen (memoriju računala), a izlazni tok se može usporediti s cijevi kroz koju voda izlazi iz bazena. Važna značajka ove cijevi je da se podaci mogu pomicati samo u jednom smjeru. Čak i ako se ista cijev koristi za ulaz i izlaz, to se ne može dogoditi u isto vrijeme: da bi se promijenio smjer protoka, potrebno ga je zaustaviti, izvršiti neku radnju i tek tada se protok može usmjeriti u suprotnom smjeru. Još jedna značajka potoka je da gotovo nikad ne presušuje. Ponekad se osuši, ali to razdoblje ne može biti dugo ako sustav normalno funkcionira.

Standardna izlazna funkcija printf()

Funkcija printf() standardna je izlazna funkcija. Pomoću ove funkcije možete na ekranu monitora prikazati niz znakova, broj, vrijednost varijable...

Funkcija printf() ima prototip u stdio.h
int printf(char *kontrolni niz, ...);

Ako je uspješan, printf() vraća broj ispisanih znakova.

Kontrolna linija sadrži dvije vrste informacija: znakove koji se izravno ispisuju na ekran i specifikatore formata koji određuju kako se argumenti ispisuju.

Funkcija printf() je formatirana izlazna funkcija. To znači da je u parametrima funkcije potrebno navesti format podataka koji će biti ispisani. Format podataka određen je specifikatorima formata. Specifikator formata počinje znakom % nakon kojeg slijedi kod formata.

Specifikatori formata:

%S simbol
%d cijeli decimalni broj
%i cijeli decimalni broj
%e decimalni broj u obliku x.xx e+xx
%E decimalni broj u obliku x.xx E+xx
%f
%F decimalni broj s pomičnim zarezom xx.xxxx
%g %f ili %e, što god je kraće
%G %F ili %E, što god je kraće
%o oktalni broj
%s znakovni niz
%u decimalni broj bez predznaka
%x heksadecimalni broj
%X heksadecimalni broj
%% simbol %
%p pokazivač
%n pokazivač

Osim toga, modifikatori l i h mogu se primijeniti na naredbe formatiranja.

%ld ispis duga int
%hu marka kratka nepotpisana
%Lf duga dvostruka marka

U specifikatoru formata, nakon simbola % može se navesti preciznost (broj znamenki nakon decimalne točke). Preciznost je postavljena kako slijedi: %.n<код формата>. Gdje je n broj znamenki iza decimalne točke, i<код формата>- jedan od gore navedenih kodova.

Na primjer, ako imamo varijablu x=10.3563 tipa float i želimo prikazati njezinu vrijednost točnu na 3 decimalna mjesta, tada bismo trebali napisati:

printf("Varijabla x = %.3f",x);

Proizlaziti:
Varijabla x = 10,356

Također možete odrediti minimalnu širinu polja dodijeljenog za ispis. Ako je redak ili broj veći od navedene širine polja, tada se redak ili broj ispisuje u cijelosti.

Na primjer, ako napišete:

printf("%5d",20);

tada će rezultat biti sljedeći:
20

Napominjemo da broj 20 nije ispisan od samog početka retka. Ako želite da se neiskorišteni prostori polja popune nulama, potrebno je ispred širine polja staviti simbol 0.

Na primjer:

printf("%05d",20);

Proizlaziti:
00020

Uz specifikatore formata podataka, kontrolni red može sadržavati kontrolne znakove:

\b BS, dolje
\f Nova stranica, promjena stranice
\n Novi redak, novi redak
\r Povrat prtljage
\t Horizontalna tablica
\v Okomita kartica
\" Dupli navodnici
\" Apostrof
\\ Obrnuta kosa crta
\0 Nulti znak, nulti bajt
\a Signal
\N Oktalna konstanta
\xN Heksadecimalna konstanta
\? Upitnik

Najčešće ćete koristiti znak \n. S ovim kontrolnim znakom možete ići u novi red. Pogledajte primjere programa i sve će vam biti jasno.

Primjeri programa.

/* Primjer 1 */
#uključi

void glavni (praznina)
{
int a,b,c; // Deklaracija varijabli a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Rezultat programa:
a=5, b=6, c=9

/* Primjer 2 */
#uključi

void glavni (praznina)
{
float x,y,z;

X=10,5;
y=130,67;
z=54;

Ispisf("Koordinate objekta: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Rezultat programa:
Koordinate objekta: x:10.50, y:130.67, z:54.00

/* Primjer 3 */
#uključi

void main()
{
int x;

X=5;
printf("x=%d", x*2);
}

Rezultat programa:
x=10

/* Primjer 4 */
#uključi

void glavni (praznina)
{
printf("\"Tekst pod navodnicima\"");
printf("\nSadržaj kisika: 100%%");
}

Rezultat programa:
"Tekst pod navodnicima"
Sadržaj kisika: 100%

/* Primjer 5 */
#uključi

void glavni (praznina)
{
int a;

A=11; // 11 u decimali jednako je b u heksadecimali
printf("a-dec=%d, a-hex=%X",a,a);
}

Rezultat programa:
a-dec=11, a-hex=b

/* Primjer 6 */
#uključi

void glavni (praznina)
{
char ch1,ch2,ch3;

Ch1="A";
ch2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

Rezultat programa:
ABC

/* Primjer 7 */
#uključi

void glavni (praznina)
{
char *str="Moj niz.";

Printf("Ovo je %s",str);
}

Rezultat programa:
Ovo je Moja linija.

/* Primjer 8 */
#uključi

void glavni (praznina)
{
printf("Zdravo!\n"); // Nakon ispisa doći će do prijelaza u novi redak - \n
printf("Zovem se Pavel."); // Ovo će biti ispisano u novom retku
}

Rezultat programa:
Zdravo!
Moje ime je Pavel.

Standardna funkcija unosa scanf()

Funkcija scanf() je funkcija formatiranog unosa. Uz njegovu pomoć možete unositi podatke sa standardnog ulaznog uređaja (tipkovnice). Ulazni podaci mogu biti cijeli brojevi, brojevi s pomičnim zarezom, znakovi, znakovni nizovi i pokazivači.

Funkcija scanf() ima sljedeći prototip u stdio.h:
int scanf(char *kontrolni niz);

Funkcija vraća broj varijabli kojima je dodijeljena vrijednost.

Kontrolni niz sadrži tri vrste znakova: specifikatore formata, razmake i druge znakove. Specifikatori formata počinju znakom %.

Specifikatori formata:

Prilikom unosa niza pomoću funkcije scanf() (specifikator formata %s), niz se unosi prije prvog razmaka!! oni. ako unesete niz "Hello world!" pomoću funkcije scanf().


scanf("%s",str);

tada će se nakon unosa rezultirajućeg niza, koji će biti pohranjen u nizu str, sastojati od jedne riječi "Hello". FUNKCIJA ULAZI U NIZ PRIJE PRVOG RAZMAKA! Ako želite unijeti nizove s razmacima, koristite funkciju

char *dobiva(char *buf);

S funkcijom gets() možete unijeti cijele nizove. Funkcija gets() čita znakove s tipkovnice dok se ne pojavi znak novog retka (\n). Sam znak novog retka pojavljuje se kada pritisnete enter. Funkcija vraća pokazivač na buf. buf - međuspremnik (memorija) za ulazni niz.

Iako gets() nije tema ovog članka, napišimo primjer programa koji vam omogućuje da unesete cijeli red s tipkovnice i prikažete ga na ekranu.

#uključi

void glavni (praznina)
{
char međuspremnik; // niz (spremnik) za ulazni niz

Dobiva (spremnik); // unesite redak i pritisnite enter
printf("%s",međuspremnik); // izlaz unesenog niza na ekran
}

Još jedna važna napomena! Za unos podataka pomoću funkcije scanf() potrebno je proslijediti adrese varijabli kao parametre, a ne same varijable. Da biste dobili adresu varijable, morate ispred naziva varijable staviti & (ampersand). Znak & znači preuzimanje adrese.

Što adresa znači? Pokušat ću objasniti. U programu imamo varijablu. Varijabla pohranjuje svoju vrijednost u memoriju računala. Dakle, ovo je adresa koju dobivamo koristeći & je adresa u memoriji računala gdje je pohranjena vrijednost varijable.

Pogledajmo primjer programa koji nam pokazuje kako koristiti &

#uključi

void glavni (praznina)
{
int x;

Printf("Unesite varijablu x:");
scanf("%d",&x);
printf("Varijabla x=%d",x);
}

Sada se vratimo na kontrolnu liniju funkcije scanf(). Opet:

int scanf(char *kontrolni niz);

Znak razmaka na kontrolnom nizu naređuje da se jedan ili više razmaka preskoče u ulaznom toku. Osim razmaka, može se uočiti tabulator ili znak novog retka. Znak koji nije nula označava da je znak pročitan i odbačen.

Razdjelnici između dva broja koja unesete su razmak, tabulator ili novi red. * iza % i prije koda formata (specifikator formata) naređuje da se tip podataka čita, ali ne i dodjeljuje toj vrijednosti.

Na primjer:

scanf("%d%*c%d",&i,&j);

unos 50+20 će postaviti varijablu i na 50, varijablu j na 20, a znak + će biti pročitan i zanemaren.

Naredba formata može odrediti najveću širinu polja za čitanje.

Na primjer:

scanf("%5s",str);

označava potrebu čitanja prvih 5 znakova iz ulaznog toka. Ako unesete 1234567890ABC, str niz će sadržavati samo 12345, preostali znakovi će biti zanemareni. Razdjelnici: razmak, tabulator i novi red - prilikom unosa simbola tretiraju se kao i svi ostali znakovi.

Ako se neki drugi znakovi pojavljuju u kontrolnom nizu, oni su namijenjeni za prepoznavanje i preskakanje odgovarajućeg znaka. Operator toka znakova 10plus20

scanf("%dplus%d",&x,&y);

dodijelit će vrijednost 10 varijabli x, vrijednost 20 varijabli y i preskočit će znakove plus jer se pojavljuju u kontrolnom nizu.

Jedna od moćnih značajki funkcije scanf() je njezina sposobnost određivanja skupa skeniranja. Skup pretraživanja definira skup znakova s ​​kojima će se uspoređivati ​​znakovi koje čita funkcija scanf(). Funkcija scanf() čita znakove sve dok se pojavljuju u skupu pretraživanja. Čim se uneseni znak ne pronađe u skupu pretraživanja, funkcija scanf() prelazi na sljedeći specifikator formata. Skup za pretraživanje definiran je popisom znakova u uglatim zagradama. Znak % stavlja se ispred početne zagrade. Pogledajmo ovo na primjeru.

#uključi

void glavni (praznina)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Unesite skup znakova:
12345abcdefg456

Program će prikazati na ekranu:
12345
abcdefg456

Prilikom određivanja skupa za pretraživanje, također možete koristiti znak crtice za određivanje razmaka, kao i maksimalnu širinu polja za unos.

scanf("%10", str1);

Također možete definirati znakove koji nisu uključeni u skup pretraživanja. Prvom od ovih znakova prethodi ^. Mnogi znakovi razlikuju mala i velika slova.

Dopustite mi da vas podsjetim da kada koristite funkciju scanf(), morate joj proslijediti adrese varijabli kao parametre. Gornji kod je napisan:

char str; // niz od 80 znakova
scanf("%s",str);

Imajte na umu da str ne prethodi &. To je učinjeno zato što je str niz, a naziv niza - str je pokazivač na prvi element niza. Stoga se znak & ne smije koristiti. Adresu već prosljeđujemo funkciji scanf(). Pa, jednostavno rečeno, str je adresa u memoriji računala gdje će biti pohranjena vrijednost prvog elementa niza.

Primjeri programa.

Primjer 1.
Ovaj program prikazuje upit "Koliko imaš godina?:" i čeka unos podataka. Ako, na primjer, unesete broj 20, program će prikazati redak "Imate 20 godina". Kada pozivamo funkciju scanf(), ispred varijable starosti stavljamo znak &, budući da funkcija scanf() treba adrese varijable. Funkcija scanf() upisat će unesenu vrijednost na navedenu adresu. U našem slučaju upisana vrijednost 20 bit će upisana na adresu varijable dob.

/* Primjer 1 */

#uključi

void glavni (praznina)
{
int dob;

Printf("\nKoliko imaš godina?:");
scanf("%d",&dob);
printf("Imaš %d godina.", dob);
}

Primjer 2.
Program kalkulatora. Ovaj kalkulator može samo zbrajati brojeve. Kada unesete 100+34, program će dati rezultat: 100+34=134.

/* Primjer 2 */

#uključi

void glavni (praznina)
{
int x, y;

Printf("\nKalkulator:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Primjer 3.
Ovaj primjer pokazuje kako postaviti širinu polja za čitanje. U našem primjeru, širina polja je pet znakova. Ako unesete niz s velikim brojem znakova, svi znakovi nakon 5. bit će odbačeni. Primijetite poziv funkcije scanf(). Znak & ne prethodi nazivu niza jer je naziv niza adresa prvog elementa niza.

/* Primjer 3 */

#uključi

void glavni (praznina)
{
char ime;

Printf("\nUnesite svoje korisničko ime (ne više od 5 znakova):");
scanf("%5s", ime);
printf("\nUnijeli ste %s", ime);
}

Primjer 4.
Posljednji primjer u ovom članku pokazuje kako se može koristiti skup pretraživanja. Nakon pokretanja programa unesite broj od 2 do 5.

/* Primjer 4 */

#uključi

void glavni (praznina)
{
char bal;

Printf("Vaša ocjena je 2,3,4,5:");
scanf("%", &bal);
printf("\nOcjena %c", bal);
}