Opće karakteristike c. Scanf C Opis funkcije

Ovaj članak govori o funkciji scanf() u opšti pogled bez pozivanja na određeni standard, stoga su podaci iz bilo kojeg C99, C11, C++11, C++14 standarda uključeni ovdje. Možda u nekim standardima funkcija funkcionira s razlikama u odnosu na materijal predstavljen u članku.

scanf C funkcija - opis

scanf() je funkcija koja se nalazi u datotekama zaglavlja stdio.h(C) i cstdio(C++), također poznata kao formatirani programski unos. scanf čita znakove iz standardnog ulaznog toka (stdin) i konvertuje ih prema formatu, a zatim ih upisuje u navedene varijable. Format - znači da se podaci po prijemu konvertuju u određeni oblik. Dakle, funkcija scanf C je opisana:

scanf("%format", &varijable1[, &varijable2,[…]]),

gdje se varijable prosljeđuju kao adrese. Razlog za ovakav način prosljeđivanja varijabli funkciji je očigledan: kao rezultat rada, ona vraća vrijednost koja ukazuje na prisustvo grešaka, tako da je jedini način za promjenu vrijednosti varijabli prolazak po adresi. Također, zahvaljujući ovoj metodi, funkcija može obraditi podatke bilo koje vrste.

Neki programeri nazivaju funkcije poput scanf() ili printf() procedurama zbog analogije s drugim jezicima.

Scanf vam omogućava da unesete sve osnovne tipove jezika: char, int, float, string, itd. U slučaju varijabli tipa string, nije potrebno specificirati znak adrese - "&", jer je varijabla tipa string niz, a njeno ime je adresa prvog elementa niza u memoriji računara. .

Format unosa ili kontrolni niz

Počnimo tako što ćemo pogledati primjer korištenja funkcije scanf C iz opisa.

#include int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //zahtjev za linux sisteme)

Format unosa se sastoji od sljedeća četiri parametra: tip %[*][width][modifiers]. U ovom slučaju, znak "%" i tip su obavezni parametri. Odnosno, minimalni oblik formata izgleda ovako: “%s”, “%d” i tako dalje.

Općenito, znakovi koji čine niz formata podijeljeni su na:

  • specifikacije formata - sve što počinje znakom %;
  • znakovi za razdvajanje ili razmak - to su razmak, tab (\t), novi red (\n);
  • znakovi osim razmaka.

Funkcija možda nije sigurna.

Koristite funkciju scanf_s() umjesto scanf().

(poruka od vizuelni studio)

Specifikatori tipa ili formata, ili znakovi za konverziju, ili kontrolni znakovi

Deklaracija scanf C mora sadržavati, u najmanju ruku, specifikaciju formata, koji je naveden na kraju izraza koji počinje znakom "%". Programu govori o vrsti podataka koje treba očekivati ​​prilikom unosa, obično s tastature. Lista svih specifikacija formata u tabeli ispod.

Značenje

Program čeka na unos karaktera. Varijabla koja se upisuje mora biti tipa char.

Program očekuje decimalni cijeli broj. Varijabla mora biti tipa int.

Program očekuje unos broja s pomičnim zarezom (zarez) u eksponencijalnom obliku. Varijabla mora biti tipa float.

Program očekuje unos broja s pomičnim zarezom (zarez). Varijabla mora biti tipa float.

7

Program očekuje unos broja s pomičnim zarezom (zarez). Varijabla mora biti tipa float.

Program očekuje da se unese oktalni broj. Varijabla mora biti tipa int.

Program čeka na unos stringa. Niz je skup svih znakova do prvog naiđenog znaka za razdvajanje. Varijabla mora biti tipa string.

Program očekuje da se unese heksadecimalni broj. Varijabla mora biti tipa int.

Varijabla očekuje unos pokazivača. Varijabla mora biti tipa pokazivača.

Upisuje u varijablu cjelobrojnu vrijednost jednaku broju znakova koje je do sada pročitala funkcija scanf.

Program čita cijeli broj bez predznaka. Tip varijable mora biti cijeli broj bez predznaka.

Program očekuje da se unese binarni broj. Varijabla mora biti tipa int.

Skup znakova za skeniranje. Program čeka na unos znakova, iz ograničenog skupa specificiranog između scanf-a će raditi sve dok ima znakova iz specificiranog skupa na ulaznom toku.

Znakovi u nizu formata

Simbol zvjezdice (*)

Zvjezdica (*) je zastavica koja označava da operacija dodjeljivanja treba biti potisnuta. Odmah iza znaka "%" stavlja se zvjezdica. Na primjer,

Scanf("%d%*c%d", &x, &y); // zanemariti znak između dva cijela broja. scanf("%s%*d%s", str, str2); //zanemarimo cijeli broj između dva niza.

Odnosno, ako unesete redak "45-20" u konzolu, program će učiniti sljedeće:

  1. Varijabli "x" će biti dodijeljena vrijednost 45.
  2. Varijabli "y" će biti dodijeljena vrijednost 20.
  3. A znak minus (crtica) "-" će biti zanemaren zahvaljujući "%*c".

Širina (ili širina margine)

Ovo je cijeli broj između znaka "%" i specificatora formata koji specificira maksimalni iznos znakove za čitanje za trenutnu operaciju čitanja.

Postoji nekoliko važnih tačaka koje treba imati na umu:

  1. scanf će prekinuti ako naiđe na znak za razdvajanje, čak i ako nije brojao 20 znakova.
  2. Ako se unese više od 20 znakova, samo će prvih 20 znakova biti upisano u str.

Modifikatori tipa (ili preciznost)

Ovo su posebne zastavice koje mijenjaju tip podataka koji se očekuje za unos. Zastavica je navedena lijevo od specificatora tipa:

  • L ili l (mali L) Kada se "l" koristi sa specifikacijama d, i, o, u, x, zastavica govori programu da se očekuje dug int unos. Kada koristite "l" sa specifikacijom e ili f, zastavica govori programu da treba očekivati ​​dvostruku vrijednost. Upotreba "L" govori programu da se očekuje dugo duplo. Upotreba "l" sa specifikacijama "c" i "s" govori programu da se očekuju dvobajtni karakteri kao što je wchar_t. Na primjer, "%lc", "%ls", "%l".
  • h je zastavica koja označava kratki tip.
  • hh - označava da je varijabla pokazivač na vrijednost tipa signed char ili unsigned char. Zastava se može koristiti sa specifikacijama d, i, o, u, x, n.
  • ll (dva mala L) označava da je varijabla pokazivač na vrijednost tipa signed int ili unsigned long long int. Zastava se koristi sa specifikacijama: d, i, o, u, x, n.
  • j - označava da je varijabla pokazivač na tip intmax_t ili uintmax_t iz datoteke zaglavlja stdint.h. Koristi se sa specifikacijama: d, i, o, u, x, n.
  • z - označava da je varijabla pokazivač na tip size_t, čija je definicija u stddef.h. Koristi se sa specifikacijama: d, i, o, u, x, n.
  • t - označava da je varijabla pokazivač na tip ptrdiff_t. Definicija za ovaj tip je u stddef.h. Koristi se sa specifikacijama: d, i, o, u, x, n.

Još jasnije, slika sa modifikatorima može se predstaviti u obliku tabele. Takav opis scanf-a C za programere će biti jasniji.

Ostali likovi

Svi znakovi koji se nađu u formatu bit će odbačeni. Treba napomenuti da prisustvo razmaka ili znakova za razdvajanje (novi red, razmak, tab) u kontrolnom nizu može dovesti do drugačijeg ponašanja funkcije. U jednoj verziji, scanf() će čitati bez spremanja bilo kojeg broja separatora sve dok ne naiđe na znak koji nije separator, au drugoj verziji razmaci (samo oni) ne igraju ulogu i izraz "%d + %d" je ekvivalentno "% d+%d".

Primjeri

Razmotrimo nekoliko primjera koji vam omogućavaju razmišljanje i preciznije razumijevanje rada funkcije.

scanf("%3s", str); //ako unesete string "1d2s3d1;3" u konzolu, samo "1d2" će biti zapisano u str scanf("%dminus%d", &x, &y); //minus znakovi između dva broja će biti odbačeni scanf("%5", str); // znakovi će se unositi u str dok ne bude 5 znakova, a znakovi su brojevi od 0 do 9. scanf("%lf", &d); //očekujte dvostruki ulaz scanf("%hd", &x); //očekivani broj tipa short scanf("%hu", &y); //očekujte nepotpisani broj short scanf("lx", &z); //očekivani broj tipa long int

Iz datih primjera možete vidjeti kako se očekivani broj mijenja korištenjem razni simboli.

scanf C - opis za početnike

Ovaj odjeljak će biti koristan za početnike. Često morate imati ne toliko pri ruci Puni opis scanf C koliko detalja o tome kako funkcija radi.

  • Funkcija je donekle zastarjela. Postoji nekoliko različitih implementacija u bibliotekama razne verzije. Na primjer, poboljšana funkcija scanf S C, čiji se opis može naći na Microsoft-u.
  • Broj specifikacija u formatu mora odgovarati broju argumenata proslijeđenih funkciji.
  • Elementi ulaznog toka moraju biti odvojeni samo znakovima za razdvajanje: razmak, tabulator, novi red. Zarez, tačka i zarez, tačka itd. - ovi znakovi nisu separatori za funkciju scanf().
  • Ako scanf naiđe na znak za razdvajanje, unos će biti zaustavljen. Ako postoji više od jedne varijable za čitanje, scanf će prijeći na čitanje sljedeće varijable.
  • Najmanja nedosljednost u formatu ulaznih podataka dovodi do nepredvidivih rezultata programa. Pa, ako se program samo završi s greškom. Ali često program nastavlja da radi i radi pogrešno.
  • scanf("%20s...",...); Ako ulazni tok premašuje 20 znakova, tada će scanf pročitati prvih 20 znakova i ili prekinuti ili preći na čitanje sljedeće varijable, ako je ona navedena. U ovom slučaju, sljedeći poziv na scanf će nastaviti čitanje ulaznog toka od tačke gdje je rad prethodnog poziva na scanf zaustavljen. Ako se prilikom čitanja prvih 20 znakova naiđe na znak za razdvajanje, scanf će prekinuti ili preći na čitanje sljedeće varijable, čak i ako nije pročitao 20 znakova za prvu varijablu. U ovom slučaju, svi nepročitani znakovi će biti pridruženi sljedećoj varijabli.
  • Ako skup skeniranih znakova počinje znakom "^", tada će scanf čitati podatke sve dok ne naiđe na znak za razdvajanje ili znak iz skupa. Na primjer, "%[^A-E1-5]" će čitati podatke iz toka sve dok se ne naiđe jedan od velikih engleskih znakova od A do E ili jedan od brojeva od 1 do 5.
  • Funkcija scanf C, po definiciji, vraća broj jednak broju uspješnih upisa u varijable. Ako scanf zapiše 3 varijable, tada će rezultat funkcije uspješan vratiti broj 3. Ako scanf ne može upisati nijednu varijablu, tada će rezultat biti 0. I, konačno, ako scanf iz nekog razloga uopće nije mogao započeti, rezultat će biti EOF .
  • Ako je funkcija scanf() neispravno završila svoj posao. Na primjer, scanf("%d", &x) - očekivao se broj, ali je unos primio znakove. Sljedeći poziv scanf() će početi na mjestu u ulaznom toku gdje je prethodni poziv funkcije stao. Da biste prevazišli ovaj problem, potrebno je da se riješite problematičnih karaktera. Ovo se može učiniti, na primjer, pozivanjem scanf("%*s"). To jest, funkcija će pročitati niz znakova i odbaciti ga. Na ovaj lukav način možete nastaviti sa unosom potrebnih podataka.
  • Neke implementacije scanf() ne dozvoljavaju skeniranje "-" u skupu znakova.
  • Specifikator "%c" čita svaki znak iz toka. To jest, takođe čita znak za razdvajanje. Da biste preskočili znak za razdvajanje i nastavili čitati željeni znak, može se koristiti "%1s".
  • Kada koristite specifikaciju "c", prihvatljivo je koristiti širinu "%10c", ali tada u obliku varijabla funkcije scanf treba proći niz elemenata tipa char.
  • “%” znači “sva mala slova engleske abecede”, a “%” znači samo 3 znaka: 'z', 'a', '-'. Drugim riječima, znak "-" znači raspon samo ako se nalazi između dva znaka koja su u ispravnom redoslijedu. Ako je "-" na kraju izraza, na početku ili u pogrešnom redoslijedu znakova s ​​obje strane, onda je to samo znak crtice, a ne raspon.

Zaključak

Ovim se završava opis scanf-a C. Ovo je zgodna zgodna funkcija za rad mali programi i kada se koristi proceduralni metod programiranja. Međutim, glavni nedostatak je broj nepredvidivih grešaka koje se mogu pojaviti prilikom korištenja scanf-a. Stoga je opis scanf-a C prilikom programiranja najbolje držati pred očima. U velikim profesionalnim projektima koriste se iostreamovi, zbog činjenice da imaju mogućnosti višeg nivoa, bolje su u stanju uhvatiti i rukovati greškama, kao i raditi sa značajnim količinama informacija. Također treba napomenuti da je opis scanf C na ruskom dostupan na mnogim internetskim izvorima, kao i primjeri njegove upotrebe, zbog starosti funkcije. Stoga, ako je potrebno, uvijek možete pronaći odgovor na tematskim forumima.

C/C++ standardna biblioteka uključuje brojne funkcije za čitanje i pisanje na konzolu (tastatura i monitor). Ove funkcije čitaju i pišu podatke kao jednostavan tok znakova.

Koncept toka (stream), koji se koristi u programiranju, usko je povezan s uobičajenim, svakodnevnim razumijevanjem ove riječi. Ulazni tok se može uporediti sa cijevi kroz koju voda (informacije) ulazi u bazen (kompjuterska memorija), izlazni tok - s cijevi kroz koju voda izlazi iz bazena. Važna karakteristika Ova cijev je da se podaci mogu kretati samo u jednom smjeru u isto vrijeme. Čak i ako se ista cijev koristi za ulaz i izlaz, to se ne može dogoditi u isto vrijeme: da biste promijenili smjer protoka, morate ga zaustaviti, izvršiti neku radnju i tek onda usmjeriti tok u suprotnom smjeru. Još jedna karakteristika potoka je da gotovo nikada ne presuši. Ponekad presuši, ali ovaj period ne može biti dug ako sistem normalno funkcioniše.

printf() standardna izlazna funkcija

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

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

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

Kontrolni niz sadrži dvije vrste informacija: znakove koji se direktno prikazuju na ekranu i specifikacije formata koji određuju kako će se dati argumenti.

Funkcija printf() je formatirana izlazna funkcija. To znači da je u parametrima funkcije potrebno specificirati format podataka koji se izlaze. Format podataka je specificiran specifikacijama formata. Specifikator formata počinje sa % iza kojeg slijedi kod formata.

Specifikatori formata:

%Sa 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 pokretni zarez xx.xxxx
%g %f ili %e što je kraće
%G %F ili %E što je kraće
%o oktalni broj
%s niz znakova
%u decimalni broj bez predznaka
%x heksadecimalni broj
%X heksadecimalni broj
%% simbol %
%p pokazivač
%n pokazivač

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

%ld print long int
%hu ispisati kratko bez potpisa
%Lf print long double

U specificatoru formata, nakon simbola %, može se specificirati preciznost (broj cifara nakon decimalnog zareza). Preciznost se postavlja na sljedeći način: %.n<код формата>. Gdje je n broj cifara iza decimalnog zareza, i<код формата>- jedan od kodova iznad.

Na primjer, ako imamo varijablu x=10,3563 tipa float i želimo prikazati njenu vrijednost s točnošću od 3 decimale, tada bi trebali napisati:

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

rezultat:
Varijabla x = 10,356

Također možete odrediti minimalnu širinu margine koja će se ispisati. Ako je niz ili broj veći od navedene širine polja, tada se niz ili broj ispisuje u cijelosti.

Na primjer, ako napišete:

printf("%5d",20);

tada će rezultat biti:
20

Imajte na umu da broj 20 nije ispisan od samog početka reda. Ako želite da se neiskorištena mjesta polja popune nulama, tada morate staviti znak 0 ispred širine polja.

Na primjer:

printf("%05d",20);

rezultat:
00020

Pored specifikacija formata podataka, kontrolni niz može sadržavati kontrolne znakove:

\b BS, donja rupa
\f Nova stranica, prijevod stranice
\n Novi red, prijelaz na red
\r Povrat kočije
\t Horizontalna kartica
\v Vertikalna kartica
\" dvostruki citat
\" Apostrof
\\ Povratna kosa crta
\0 Null karakter, null bajt
\a Signal
\N Oktalna konstanta
\xN Heksadecimalna konstanta
\? Upitnik

Najčešće ćete koristiti znak \n. Sa ovim kontrolnim karakterom moći ćete skočiti na novi red. Pogledajte primjere programa i sve ćete razumjeti.

Primjeri programa.

/* Primjer 1 */
#include

void main(void)
{
int a,b,c; // Najava varijable 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 */
#include

void main(void)
{
float x,y,z;

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

Printf("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 */
#include

void main()
{
intx;

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

Rezultat programa:
x=10

/* Primjer 4 */
#include

void main(void)
{
printf("\"Tekst pod navodnicima\"");
printf("\nSadržaj kiseonika: 100%%");
}

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

/* Primjer 5 */
#include

void main(void)
{
int a;

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

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

/* Primjer 6 */
#include

void main(void)
{
char ch1,ch2,ch3;

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

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

Rezultat programa:
ABC

/* Primjer 7 */
#include

void main(void)
{
char *str="Moj string.";

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

Rezultat programa:
Ovo je moja linija.

/* Primjer 8 */
#include

void main(void)
{
printf("Zdravo!\n"); // Nakon ispisa, bit će novi red - \n
printf("Moje ime je Paul."); // Ovo će biti ispisano u novom redu
}

Rezultat programa:
Zdravo!
Moje ime je Pavel.

scanf() standardna funkcija unosa

Funkcija scanf() je formatirana funkcija unosa. Pomoću njega možete unositi podatke sa standardnog uređaja za unos (tastatura). Unosi mogu biti cijeli brojevi, brojevi s pomičnim zarezom, znakovi, nizovi i pokazivači.

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

Funkcija vraća broj varijabli kojima je dodijeljena vrijednost.

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

Specifikatori formata:

Prilikom unosa niza pomoću funkcije scanf() (specifikator formata %s), string se unosi do prvog razmaka!! one. ako unesete string "Hello world!" koristeći funkciju scanf().


scanf("%s",str);

onda će se nakon unosa rezultujućeg stringa, koji će biti pohranjen u str nizu, sastojati od jedne riječi "Hello". FUNKCIJA ULAZI NIZ DO PRVOG PROSTORA! Ako želite unijeti nizove s razmacima, onda koristite funkciju

char *gets(char *buf);

Pomoću funkcije gets() možete unijeti pune nizove. Funkcija gets() čita znakove sa tastature sve dok se ne pojavi znak nova linija(\n). Sam karakter novog reda pojavljuje se kada pritisnete tipku enter. Funkcija vraća pokazivač na buf. buf - bafer (memorija) za ulazni niz.

Iako gets() izlazi iz okvira ovog članka, hajde da napišemo primjer programa koji vam omogućava da unesete cijeli red s tastature i prikažete ga na ekranu.

#include

void main(void)
{
charbuffer; // niz (bafer) za ulazni niz

Gets(buffer); // unesite string i pritisnite enter
printf("%s",bafer); // izlaz unesenog niza na ekran
}

Još jedna važna napomena! Da biste unijeli podatke pomoću funkcije scanf(), potrebno je kao parametre proslijediti adrese varijabli, a ne same varijable. Da biste dobili adresu varijable, prethodite imenu varijable sa & (ampersand). Znak & znači preuzimanje adrese.

Šta znači adresa? Pokušaću da objasnim. U programu imamo varijablu. Varijabla pohranjuje svoju vrijednost u memoriju računala. Dakle, adresa koju dobijamo sa & je adresa u memoriji računara gde je pohranjena vrednost varijable.

Pogledajmo primjer programa koji nam pokazuje kako koristiti &

#include

void main(void)
{
intx;

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

Vratimo se sada na kontrolnu liniju funkcije scanf(). opet:

int scanf(char *kontrolni string);

Znak za razmak u kontrolnoj liniji upućuje da se preskoči jedan ili više razmaka u ulaznom toku. Osim razmaka, može se prihvatiti tabulator ili znak novog reda. Znak koji nije nula označava da se taj znak pročita i odbaci.

Razdjelnici između dva ulazna broja su razmak, tabulator ili novi red. * iza % i prije koda formata (specifikator formata) upućuje na čitanje podataka navedenog tipa, ali ne i na dodjelu te vrijednosti.

Na primjer:

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

upisivanjem 50+20 postavit će se i na 50, j na 20, a + će biti pročitan i zanemaren.

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

Na primjer:

scanf("%5s",str);

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

Ako se u kontrolnom nizu nađu bilo koji drugi znakovi, oni su namijenjeni da odrede i preskoče odgovarajući znak. 10 plus 20 znakova po operateru

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

će dodijeliti x na 10, y na 20 i preskočiti znakove plus jer se pojavljuju na kontrolnoj liniji.

Jedan od moćne karakteristike funkcija scanf() je mogućnost postavljanja skupa pretraživanja (scanset). Skup za pretraživanje definira skup znakova s ​​kojim će se upoređivati ​​znakovi pročitani scanf(). Funkcija scanf() čita znakove sve dok se pojavljuju u skupu pretraživanja. Jednom kada se uneseni znak ne pronađe u skupu pretraživanja, funkcija scanf() prelazi na sljedeći specificator formata. Skup za pretragu je definiran listom znakova u uglastim zagradama. Početnoj zagradi prethodi znak %. Pogledajmo ovo na primjeru.

#include

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

Na ekranu će program prikazati:
12345
abcdefg456

Prilikom navođenja skupa za pretragu, možete koristiti i znak crtice za određivanje razmaka, kao i maksimalnu širinu polja za unos.

scanf("%10", str1);

Takođe možete definisati znakove koji nisu u skupu za pretragu. Prvom od ovih znakova prethodi znak ^. Skup znakova razlikuje mala i velika slova.

Dozvolite mi da vas podsjetim da kada koristite funkciju scanf (), morate joj proslijediti adrese varijabli kao parametre. Iznad kod je napisano:

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

Imajte na umu da str ne prethodi &. To je zato što je str niz, a ime niza, str, je pokazivač na prvi element niza. Stoga se ne stavlja znak &. Već prosljeđujemo adresu funkciji scanf(). Pa, jednostavno rečeno, str je adresa u memoriji računara na kojoj će biti pohranjena vrijednost prvog elementa niza.

Primjeri programa.

Primjer 1
Ovaj program prikazuje upit "Koliko imaš godina?:" i čeka na unos. Ako, na primjer, unesete broj 20, program će prikazati string "Imate 20 godina.". Kada smo pozvali funkciju scanf(), dali smo prefiks varijabli starosti sa &, jer funkcija scanf() treba adrese varijabli. Funkcija scanf() će zapisati unesenu vrijednost na navedenu adresu. U našem slučaju, unesena vrijednost 20 biće upisana na adresu varijable starosti.

/* Primjer 1 */

#include

void main(void)
{
int age;

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

Primjer 2
Program kalkulatora. Ovaj kalkulator može samo sabirati brojeve. Ako unesete 100+34, program će vratiti rezultat: 100+34=134.

/* Primjer 2 */

#include

void main(void)
{
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 sa više znakova, tada će svi znakovi nakon 5. biti odbačeni. Obratite pažnju na poziv funkcije scanf(). Znak & ne prethodi imenu imena niza jer je ime imena niza adresa prvog elementa niza.

/* Primjer 3 */

#include

void main(void)
{
charname;

Printf("\nUnesite svoje korisničko ime (maksimalno 5 karaktera):");
scanf("%5s", ime);
printf("\nUneli ste %s", ime);
}

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

/* Primjer 4 */

#include

void main(void)
{
charbal;

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

C++ programski jezik

Posljednje ažuriranje: 28.08.2017

Programski jezik C++ je programski jezik opšte namene, kompajlirani na visokom nivou statičko kucanje, koji je pogodan za kreiranje širokog spektra aplikacija. C++ je jedan od najpopularnijih i najraširenijih jezika danas.

Svoje korijene ima u jeziku C, koji je 1969-1973 u Bell Labs-u razvio programer Dennis Ritchie. Početkom 1980-ih, danski programer Bjarne Stroustrup, tada u Bell Labs-u, razvio je C++ kao proširenje C jezika. Zapravo, u početku je C++ jednostavno dopunio C jezik nekim karakteristikama objektno orijentisanog programiranja. I tako ga je sam Stroustrup isprva nazvao "C sa klasama" ("C sa klasama").

naknadno novi jezik počeo da stiče popularnost. Dodane su mu nove karakteristike koje ga čine ne samo dodatkom C, već i potpuno novim programskim jezikom. Kao rezultat, "C sa klasama" je preimenovan u C++. I od tada su se oba jezika počela razvijati nezavisno jedan od drugog.

C++ je moćan jezik, koji nasljeđuje bogate memorijske mogućnosti od C-a. Stoga C++ često nalazi svoju primjenu u sistemskom programiranju, posebno pri kreiranju operativni sistemi, drajveri, razni uslužni programi, antivirusi itd. Inače, Windows je uglavnom napisan na C++. Ali samo aplikacija za sistemsko programiranje dati jezik nije ograničeno. C++ se može koristiti u programima bilo kojeg nivoa gdje su brzina i performanse važni. Često se koristi za kreiranje grafičke aplikacije, razne aplikativni programi. Također se posebno često koristi za kreiranje igara s bogatim, bogatim vizualima. Osim toga, mobilni smjer u posljednje vrijeme uzima maha, gdje je C++ također našao svoju primjenu. Čak iu web razvoju možete koristiti C++ za kreiranje web aplikacija ili neke vrste pomoćnih servisa koji služe web aplikacijama. Općenito, C++ je široko korišten jezik u kojem možete napisati gotovo bilo koju vrstu programa.

C++ je kompajlirani jezik, što znači da prevodilac prevodi izvor u C++ u izvršnu datoteku koja sadrži skup mašinskih instrukcija. Ali različite platforme imaju svoje karakteristike, tako da se kompajlirani programi ne mogu jednostavno prenijeti s jedne platforme na drugu i tamo pokrenuti. Međutim, na nivou izvornog koda, C++ programi su uglavnom prenosivi osim ako se ne koriste neke karakteristike specifične za OS. A dostupnost kompajlera, biblioteka i razvojnih alata za skoro sve uobičajene platforme omogućava kompajliranje istog C++ izvornog koda u aplikacije za ove platforme.

Za razliku od C, jezik C++ vam omogućava da pišete aplikacije u objektno orijentisanom stilu, predstavljajući program kao kolekciju klasa i objekata koji međusobno komuniciraju. Ovo pojednostavljuje kreiranje velikih aplikacija.

Prekretnice razvoja

1979-80, Bjarne Stroustrup je razvio proširenje za jezik C - "C sa klasama". 1983. jezik je preimenovan u C++.

Godine 1985. objavljena je prva komercijalna verzija jezika C++, kao i prvo izdanje knjige "Programski jezik C++", koja je predstavljala prvi opis ovog jezika u odsustvu zvaničnog standarda.

Objavljeno 1989 nova verzija C++ 2.0, koji je uključivao brojne nove karakteristike. Nakon toga, jezik se relativno sporo razvijao sve do 2011. godine. Ali u isto vrijeme, 1998. godine učinjen je prvi pokušaj standardizacije jezika od strane ISO (Međunarodne organizacije za standardizaciju). Prvi standard se zvao ISO/IEC 14882:1998 ili skraćeno C++98. Kasnije 2003. godine objavljena je nova verzija standarda C++03.

Godine 2011. objavljen je novi C++11 standard koji je sadržavao mnoge dodatke i obogatio jezik C++. veliki broj nova funkcionalnost. Nakon toga je 2014. uslijedio manji dodatak standardu, također poznat kao C++14. I još jedno ključno izdanje jezika zakazano je za 2017.

Kompajleri i razvojna okruženja

Da biste razvili programe u C++, potreban vam je kompajler - on prevodi C++ izvorni kod u izvršnu datoteku, koja se zatim može pokrenuti. Ali trenutno postoji mnogo različitih kompajlera. Mogu se razlikovati u različitim aspektima, posebno u implementaciji standarda. Osnovna lista kompajlera za C++ može se naći na wikipediji. Za razvoj se preporučuje odabir onih kompajlera koji razvijaju i implementiraju sve najnovije standarde. Na primjer, u ovom vodiču će se pretežno koristiti besplatno dostupni g++ kompajler, razvijen od strane GNU projekta.

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

Učenje osnova i suptilnosti programskog jezika C++. Udžbenik sa praktičnim zadacima i testovima. Želite li naučiti programirati? Onda ste na pravom mjestu - ovdje besplatno obrazovanje programiranje. Bilo da imate iskustva ili ne, ove lekcije programiranja će vam pomoći da započnete kreiranje, kompajliranje i otklanjanje grešaka u C++ programima u različitim razvojnim okruženjima: Visual Studio, Code::Blocks, Xcode ili Eclipse.

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

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

Za repost +20 do karme i moja zahvalnost!

Poglavlje broj 0. Uvod. Početak rada

Poglavlje broj 1. Osnove C++

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

Poglavlje broj 3. Operatori u C++

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

Poglavlje broj 5. Redosled kojim se kod izvršava u programu. Petlje, grane u C++

Ovi tutorijali su za sve, bilo da ste novi u programiranju ili već imate veliko iskustvo u programiranju na drugim jezicima! Ovaj materijal je za one koji žele naučiti jezike C / C ++ od samih njegovih osnova do najsloženijih struktura.

C++ je programski jezik, poznavanje ovog programskog jezika će vam omogućiti da kontrolišete svoj računar najviši nivo. U idealnom slučaju, možete natjerati računar da radi šta god želite. Naša stranica će vam pomoći da naučite programski jezik C++.

Instaliranje /IDE

Prva stvar koju treba da uradite pre nego što počnete da učite C++ je da se uverite da imate IDE - integrisano razvojno okruženje (program u kojem ćete programirati). Ako nemate IDE, onda ste ovdje. Kada se odlučite za IDE, instalirajte ga i vježbajte kreiranje jednostavnih projekata.

Uvod u C++

Jezik C++ je skup komandi koje govore računaru šta da radi. Ovaj skup naredbi se obično naziva izvorni kod ili samo kod. Naredbe su ili "funkcije" ili " ključne riječi". Ključne riječi (zadržane riječi C/C++) su osnovni gradivni blokovi jezika. Funkcije su složeni građevni blokovi jer su napisane u terminima jednostavnijih funkcija, kao što ćete vidjeti u našem prvom programu ispod. Ova struktura funkcija liči na sadržaj knjige. Sadržaj može prikazati poglavlja knjige, svako poglavlje u knjizi može imati svoj sadržaj koji se sastoji od pasusa, svaki paragraf može imati svoje podstavke. Iako C++ pruža mnoge zajedničke funkcije i rezervirane riječi koje možete koristiti, još uvijek postoji potreba za pisanjem vlastitih funkcija.

U kom dijelu programa ste počeli? Svaki program u C++-u ima jednu funkciju, zove se glavna ili glavna-funkcija, sa ovom funkcijom počinje izvršavanje programa. Od glavna funkcija, takođe možete pozvati bilo koje druge funkcije, bilo da smo ih napisali ili, kao što je ranije pomenuto, obezbedio kompajler.

Kako onda pristupiti ovim standardnim funkcijama? Za pristup standardne karakteristike koji se isporučuju s kompajlerom, morate uključiti datoteku zaglavlja koristeći direktivu preprocesora — #include . Zašto je efikasan? Pogledajmo primjer program rada:

#include << "Моя первая программа на С++\n"; cin.get(); }

Pogledajmo bliže elemente programa. #include je "preprocesorska" direktiva koja govori kompajleru da stavi kod iz iostream zaglavlja u naš program prije kreiranja izvršnog fajla. Uključivanjem datoteke zaglavlja u vaš program, dobijate pristup mnogim različitim funkcijama koje možete koristiti u svom programu. Na primjer, naredba cout zahtijeva iostream . Linija koja koristi imenski prostor std; govori kompajleru da koristi grupu funkcija koje su dio standardne biblioteke std. Ova linija takođe omogućava programu da koristi operatore kao što je cout . Tačka-zarez je dio C++ sintakse. To govori kompajleru da je ovo kraj naredbe. Malo kasnije ćete vidjeti da se tačka-zarez koristi za završetak većine naredbi u C++.

Sljedeća važna linija programa je int main() . Ova linija govori kompajleru da postoji funkcija pod nazivom main i da funkcija vraća cijeli broj tipa int. Vitičaste zagrade ( i ) signaliziraju početak ( i kraj ) funkcije. Vitičaste zagrade se također koriste u drugim blokovima koda, ali uvijek znače istu stvar - početak i kraj bloka, respektivno.

U C++, cout objekat se koristi za prikaz teksta (izgovara se "cout"). Koristi likove<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Sljedeća naredba je cin.get() . Ovo je još jedan poziv funkcije koji čita podatke iz ulaznog toka podataka i čeka da se pritisne tipka ENTER. Ova naredba sprečava zatvaranje prozora konzole sve dok se ne pritisne tipka ENTER. Ovo vam daje vremena da pogledate izlaz programa.

Po dolasku do kraja glavne funkcije (završna vitičasta zagrada), naš program će vratiti vrijednost 0 za operativni sistem. Ova povratna vrijednost je važna jer, analizirajući je, OS može ocijeniti da li je naš program uspješno završen ili ne. Povratna vrijednost 0 znači uspjeh i vraća se automatski (ali samo za tip podataka int, druge funkcije zahtijevaju da vratite vrijednost ručno), ali ako bismo htjeli vratiti nešto drugo, na primjer 1, morali bismo to učiniti ručno .

#include korištenje imenskog prostora std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Da konsolidujete materijal, upišite programski kod u svoj IDE i pokrenite ga. Nakon što se program pokrene i kada vidite izlaz, eksperimentirajte malo s naredbom cout. Ovo će vam pomoći da se naviknete na jezik.

Obavezno komentirajte svoje programe!

Dodajte komentare kodu kako biste ga učinili jasnijim ne samo sebi već i drugima. Kompajler ignoriše komentare prilikom izvršavanja koda, što dozvoljava da se bilo koji broj komentara koristi za opisivanje stvarnog koda. Za kreiranje komentara koristite ili // , što govori kompajleru da je ostatak reda komentar, ili /* iza kojeg slijedi */. Kada učite programirati, korisno je da možete komentirati određene dijelove koda kako biste vidjeli kako se rezultat programa mijenja. Možete pročitati detaljno o tehnici komentiranja.

Šta učiniti sa svim ovim vrstama varijabli?

Ponekad može biti zbunjujuće imati više tipova varijabli kada se čini da su neki tipovi varijabli suvišni. Vrlo je važno koristiti ispravan tip varijable, jer neke varijable zahtijevaju više memorije od drugih. Također, zbog načina na koji se brojevi s pomičnim zarezom pohranjuju u memoriju, tipovi podataka float i double su "neprecizni" i ne bi se trebali koristiti kada se mora pohraniti tačna vrijednost cijelog broja.

Deklarisanje varijabli u C++

Da biste deklarirali varijablu, koristite tip sintakse<имя>; . Evo nekoliko primjera deklaracija varijabli:

int num; karakter; float num_float;

Dozvoljeno je deklarisanje više varijabli istog tipa u jednom redu, za to svaka od njih mora biti odvojena zarezom.

int x, y, z, d;

Ako ste pažljivo pogledali, možda ste vidjeli da deklaraciju varijable uvijek prati tačka i zarez. Možete pročitati više o konvenciji - "o imenovanju varijabli".

Uobičajene greške prilikom deklarisanja varijabli u C++

Ako pokušate koristiti varijablu koja nije deklarirana, vaš program se neće kompajlirati i dobićete grešku. U C++, sve ključne riječi jezika, sve funkcije i sve varijable razlikuju velika i mala slova.

Korištenje varijabli

Dakle, sada znate kako deklarirati varijablu. Evo primjera programa koji demonstrira upotrebu varijable:

#include korištenje imenskog prostora std; int main() ( int broj; cout<< "Введите число: "; cin >>broj; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Hajde da pogledamo ovaj program i proučimo njegov kod, red po red. Ključna riječ int kaže da je broj cijeli broj. Funkcija cin >> čita vrijednost u broju, korisnik mora pritisnuti enter nakon unesenog broja. cin.ignore() je funkcija koja čita karakter i ignorira ga. Naš unos smo organizovali u program, nakon što unesemo broj, pritisnemo taster ENTER, karakter koji se takođe prosleđuje u ulazni tok. Ne treba nam, pa ga odbacujemo. Imajte na umu da je varijabla deklarirana kao cijeli broj, ako korisnik pokuša unijeti decimalni broj, bit će skraćen (tj. decimalni dio broja će biti zanemaren). Pokušajte unijeti decimalni broj ili niz znakova kada pokrenete primjer programa, odgovor će ovisiti o ulaznoj vrijednosti.

Imajte na umu da se navodnici ne koriste kada se ispisuje iz varijable. Odsustvo navodnika govori kompajleru da postoji varijabla i stoga program mora provjeriti vrijednost varijable kako bi zamijenio ime varijable njenom vrijednošću kada se izvrši. Višestruki operateri smjene na istoj liniji su savršeno prihvatljivi i izlaz će biti obavljen istim redoslijedom. Morate odvojiti literale stringova (nizove pod navodnicima) i varijable, dajući svakoj različitom operatoru pomaka<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Promjena i poređenje vrijednosti

Naravno, bez obzira koji tip podataka koristite, varijable su od malog interesa osim ako se njihova vrijednost ne može promijeniti. U nastavku su prikazani neki od operatora koji se koriste u sprezi sa varijablama:

  • * množenje,
  • - oduzimanje,
  • + dodatak,
  • / divizija,
  • = zadatak,
  • == jednakost,
  • > više
  • < меньше.
  • != nije jednako
  • >= veće ili jednako
  • <= меньше или равно

Operatori koji obavljaju matematičke funkcije moraju se koristiti desno od znaka dodjeljivanja, kako bi se rezultat dodijelio varijabli s lijeve strane.

Evo nekoliko primjera:

A = 4 * 6; // koristi komentar reda i tačku-zarez, a je 24 a = a + 5; // jednako zbroju originalne vrijednosti i pet a == 5 // nije dodijeljeno pet, provjeri i jednako 5 ili ne

Često ćete koristiti == u konstrukcijama kao što su uvjetni izrazi i petlje.

A< 5 // Проверка, a менее пяти? a >5 // Provjerite je li a veće od pet? a == 5 // Provjerite je li a pet? a != 5 // Provjerite nije li a jednako pet? a >= 5 // Provjerite je li a veće ili jednako pet? a<= 5 // Проверка, a меньше или равно пяти?

Ovi primjeri ne pokazuju vrlo jasno upotrebu znakova poređenja, ali kada počnemo proučavati operatore odabira, shvatit ćete zašto je to potrebno.



Učitavanje...
Top