Általános jellemzők c. Scanf C funkció leírása

Ez a cikk a scanf() függvényt tárgyalja Általános nézet konkrét szabványra való hivatkozás nélkül, ezért bármely C99, C11, C++11, C++14 szabvány adatai szerepelnek itt. Talán egyes szabványokban a funkció a cikkben bemutatott anyagtól eltérően működik.

scanf C függvény - leírás

A scanf() az stdio.h(C) és a cstdio(C++) fejlécfájlokban található függvény, más néven formázott programbemenet. A scanf beolvassa a karaktereket a szabványos bemeneti adatfolyamból (stdin), és a formátumnak megfelelően átalakítja, majd a megadott változókba írja. Formátum - azt jelenti, hogy az adatok átvételkor egy bizonyos formára konvertálódnak. Tehát a scanf C függvény leírása:

scanf("%formátum", &változó1[, &változó2,[…]]),

ahol a változókat címként adják át. A változók függvénynek való ilyen átadásának oka nyilvánvaló: a munka eredményeként a hibák jelenlétét jelző értéket ad vissza, így a változók értékének megváltoztatásának egyetlen módja a cím szerinti átadás. Ezenkívül ennek a módszernek köszönhetően a függvény bármilyen típusú adatot képes feldolgozni.

Egyes programozók az olyan függvényeket, mint a scanf() vagy a printf() eljárásként hivatkoznak más nyelvekkel való analógia miatt.

A Scanf lehetővé teszi a nyelv összes alapvető típusának bevitelét: char, int, float, string stb. String típusú változók esetén nem kell megadni a címjelet - "&", mivel a string típusú változó egy tömb, neve pedig a tömb első elemének címe a számítógép memóriájában. .

Beviteli formátum vagy vezérlőkarakter

Kezdjük azzal, hogy a leírásból nézzünk meg egy példát a scanf C függvény használatára.

#beleértve int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //követelmény linux rendszerekhez )

A beviteli formátum a következő négy paraméterből áll: %[*][width][modifiers] type. Ebben az esetben a "%" jel és a típus kötelező paraméterek. Vagyis a formátum minimális formája így néz ki: „%s”, „%d” és így tovább.

Általában a formátum karakterláncát alkotó karakterek a következőkre oszlanak:

  • formátumspecifikátorok - minden, ami a % karakterrel kezdődik;
  • elválasztó vagy szóköz karakterek – szóköz, tabulátor (\t), új sor (\n);
  • a szóközön kívül más karaktereket.

Előfordulhat, hogy a funkció nem biztonságos.

Használja a scanf_s() függvényt a scanf() helyett.

(üzenet valakitől vizuális Stúdió)

Típus- vagy formátumspecifikátorok, konverziós karakterek vagy vezérlőkarakterek

A scanf C deklarációnak tartalmaznia kell legalább egy formátummeghatározót, amely a "%" jellel kezdődő kifejezések végén kerül megadásra. Megmondja a programnak, hogy milyen típusú adatot várjon bevitelkor, általában a billentyűzetről. Az összes formátum-specifikáció listája az alábbi táblázatban.

Jelentése

A program karakterbevitelre vár. Az írandó változónak char típusúnak kell lennie.

A program decimális egész számot vár. A változónak int típusúnak kell lennie.

A program egy lebegőpontos (vessző) szám bevitelét várja exponenciális formában. A változónak float típusúnak kell lennie.

A program egy lebegőpontos szám (vessző) bevitelét várja. A változónak float típusúnak kell lennie.

7

A program egy lebegőpontos szám (vessző) bevitelét várja. A változónak float típusúnak kell lennie.

A program egy oktális szám megadását várja. A változónak int típusúnak kell lennie.

A program karakterlánc bevitelre vár. A karakterlánc bármely karakter halmaza az első talált elválasztó karakterig. A változónak string típusúnak kell lennie.

A program hexadecimális szám megadását várja. A változónak int típusúnak kell lennie.

A változó mutató bemenetet vár. A változónak mutató típusúnak kell lennie.

A változóhoz egy egész értéket ír, amely megegyezik a scanf függvény által eddig beolvasott karakterek számával.

A program előjel nélküli egész számot olvas be. A változó típusának előjel nélküli egész számnak kell lennie.

A program egy bináris szám megadását várja. A változónak int típusúnak kell lennie.

A beolvasandó karakterkészlet. A program a karakterek bevitelére vár, a scanf között megadott korlátozott készletből addig fog működni, amíg a megadott készletből vannak karakterek a bemeneti folyamon.

Karakterek a formátumban

Csillag szimbólum (*)

A csillag (*) egy zászló, amely azt jelzi, hogy a hozzárendelési műveletet el kell tiltani. Közvetlenül a „%” jel után csillag kerül. Például,

Scanf("%d%*c%d", &x, &y); //a karakter figyelmen kívül hagyása két egész szám között. scanf("%s%*d%s", str, str2); //a két karakterlánc közötti egész szám figyelmen kívül hagyása.

Vagyis ha beírja a „45-20” sort a konzolba, a program a következőket fogja tenni:

  1. Az "x" változó értéke 45 lesz.
  2. Az "y" változó értéke 20 lesz.
  3. És a mínusz jel (kötőjel) "-" figyelmen kívül lesz hagyva a "%*c"-nek köszönhetően.

Szélesség (vagy margószélesség)

Ez egy egész szám a „%” jel és a formátummeghatározó között maximális összeget az aktuális olvasási művelethez beolvasandó karakterek.

Számos fontos szempontot érdemes szem előtt tartani:

  1. A scanf leáll, ha elválasztó karaktert talál, még akkor is, ha nem számolt 20 karaktert.
  2. Ha 20-nál több karaktert ad meg, akkor csak az első 20 karakter kerül beírásra str.

Típusmódosítók (vagy precíziós)

Ezek speciális jelzők, amelyek módosítják a bemenetre várt adatok típusát. A zászló a típusmeghatározótól balra van megadva:

  • L vagy l (kis L) Ha "l"-t használunk a d, i, o, u, x specifikációkkal, a jelző jelzi a programnak, hogy hosszú int bevitelre van szükség. Ha „l”-t használunk az e vagy f specifikátorral, a jelző azt mondja a programnak, hogy dupla értékre kell számítania. Az "L" használata azt jelzi a programnak, hogy hosszú duplázás várható. Az "l" használata a "c" és "s" specifikációkkal jelzi a programnak, hogy olyan kétbájtos karakterek várhatók, mint a wchar_t. Például "%lc", "%ls", "%l".
  • h a rövid típust jelző zászló.
  • hh – azt jelzi, hogy a változó egy előjeles char vagy előjel nélküli char típusú értékre mutató mutató. A zászló a d, i, o, u, x, n specifikációkkal használható.
  • Az ll (két kis L) azt jelzi, hogy a változó egy signed int vagy unsigned long long int típusú értékre mutató mutató. A zászlót a következő specifikációkkal használják: d, i, o, u, x, n.
  • j - azt jelzi, hogy a változó az stdint.h fejlécfájl intmax_t vagy uintmax_t típusára mutató mutató. A következő jellemzőkkel együtt használjuk: d, i, o, u, x, n.
  • z - azt jelzi, hogy a változó egy pointer a size_t típusra, amelynek definíciója az stddef.h-ban található. A következő jellemzőkkel együtt használjuk: d, i, o, u, x, n.
  • t - azt jelzi, hogy a változó egy mutató a ptrdiff_t típusra. Ennek a típusnak a definíciója az stddef.h fájlban található. A következő jellemzőkkel együtt használjuk: d, i, o, u, x, n.

Pontosabban, a módosítókkal ellátott kép táblázat formájában is bemutatható. A scanf C ilyen leírása a programozók számára világosabb lesz.

Más karakterek

A formátumban talált karakterek el lesznek vetve. Meg kell jegyezni, hogy a szóköz vagy elválasztó karakterek (újsor, szóköz, tabulátor) jelenléte a vezérlőkarakterláncban a függvény eltérő viselkedéséhez vezethet. Az egyik verzióban a scanf() beolvassa tetszőleges számú elválasztó mentése nélkül, amíg az elválasztótól eltérő karakterrel nem találkozik, míg egy másik verzióban a szóközök (csak azok) nem játszanak szerepet, és a "%d + %d" kifejezés egyenértékű a következővel: "% d+%d".

Példák

Nézzünk meg néhány példát, amelyek lehetővé teszik a funkció működésének gondolkodását és pontosabb megértését.

scanf("%3s", str); //ha az "1d2s3d1;3" karakterláncot beírja a konzolba, csak az "1d2" lesz kiírva a str scanf("%dminus%d", &x, &y); //a két szám közötti mínusz karakterek el lesznek vetve scanf("%5", str); // karakterek kerülnek be az str-be, amíg nem lesz 5 karakter, és a karakterek 0 és 9 közötti számok. scanf("%lf", &d); //dupla bemenetet várunk scanf("%hd", &x); //várt típusszám short scanf("%hu", &y); //előjel nélküli számot várunk short scanf("lx", &z); //típus várt száma long int

A megadott példákból láthatja, hogyan változik a várt szám a használatával különféle szimbólumok.

scanf C - leírás kezdőknek

Ez a rész hasznos lesz kezdőknek. Gyakran nem annyira kell kéznél lennie Teljes leírás scanf C hány részlet a függvény működéséről.

  • A funkció némileg elavult. A könyvtárakban számos különböző megvalósítás található különféle változatok. Például a továbbfejlesztett scanf S C funkció, melynek leírása megtalálható a microsofton.
  • A formátumban szereplő specifikációk számának meg kell egyeznie a függvénynek átadott argumentumok számával.
  • A bemeneti adatfolyam elemeit csak elválasztó karakterekkel szabad elválasztani: szóköz, tabulátor, új sor. Vessző, pontosvessző, pont stb. – ezek a karakterek nem a scanf() függvény elválasztói.
  • Ha a scanf elválasztó karaktert talál, a bevitel leáll. Ha egynél több változót kell olvasni, akkor a scanf továbblép a következő változó olvasására.
  • A bemeneti adatok formátumának legkisebb következetlensége a program előre nem látható eredményeihez vezet. Nos, ha a program csak hibával ér véget. De gyakran a program továbbra is működik, és rosszul csinálja.
  • scanf("%20s...",...); Ha a bemeneti adatfolyam meghaladja a 20 karaktert, akkor a scanf beolvassa az első 20 karaktert, és vagy megszakítja, vagy továbblép a következő változó olvasására, ha van megadva. Ebben az esetben a scanf következő hívása attól a ponttól folytatja a bemeneti adatfolyam olvasását, ahol a scanf előző hívása leállt. Ha az első 20 karakter olvasása közben elválasztó karaktert találunk, a scanf megszakítja vagy továbblép a következő változó olvasására, még akkor is, ha az első változónál nem olvasott 20 karaktert. Ebben az esetben az összes olvasatlan karakter a következő változóhoz lesz csatolva.
  • Ha a beolvasott karakterkészlet "^" jellel kezdődik, akkor a scanf addig olvassa az adatokat, amíg nem találkozik egy határoló karakterrel vagy egy karakterrel a készletből. Például a "%[^A-E1-5]" addig olvassa be az adatokat az adatfolyamból, amíg meg nem találja az egyik nagybetűs angol karaktert A-tól E-ig vagy az 1-től 5-ig terjedő számok egyikét.
  • A scanf C függvény definíció szerint a változók sikeres írásainak számával egyenlő számot ad vissza. Ha a scanf 3 változót ír, akkor a függvény sikereredménye a 3-as számot adja vissza. Ha a scanf nem tudott változót írni, akkor az eredmény 0 lesz. És végül, ha a scanf valamilyen okból egyáltalán nem tudott elindulni, a az eredmény EOF lesz.
  • Ha a scanf() függvény hibásan fejezte be a munkáját. Például scanf("%d", &x) - egy számot vártak, de a bemenet karaktereket kapott. A scanf() következő hívása a bemeneti adatfolyam azon pontján kezdődik, ahol az előző függvényhívás abbamaradt. A probléma leküzdéséhez meg kell szabadulni a problémás karakterektől. Ezt megteheti például a scanf("%*s") meghívásával. Vagyis a függvény beolvas egy karakterláncot, és kidobja. Ezen a trükkös módon folytathatja a szükséges adatok bevitelét.
  • A scanf() egyes megvalósításai nem teszik lehetővé a „-” karakterkészletben a vizsgálatot.
  • A "%c" specifikátor minden karaktert beolvas a folyamból. Vagyis az elválasztó karaktert is olvassa. A határoló karakter kihagyásához és a kívánt karakter olvasásának folytatásához a „%1s” használható.
  • A "c" megadó használatakor elfogadható a "%10c" szélesség használata, de akkor a formában függvény változó A scanf-nek át kell adnia egy char típusú elemtömböt.
  • A „%” jelentése „az angol ábécé összes kis betűje”, a „%” pedig mindössze 3 karaktert jelent: „z”, „a”, „-”. Más szavakkal, a "-" karakter csak akkor jelent tartományt, ha két, a megfelelő sorrendben lévő karakter között van. Ha a "-" egy kifejezés végén, elején vagy a karakterek rossz sorrendjében van a két oldalán, akkor ez csak egy kötőjel, nem pedig egy tartomány.

Következtetés

Ezzel befejeződik a scanf C leírása. Ez egy nagyon praktikus funkció, amellyel dolgozni lehet kis programok valamint a programozás procedurális módszerének alkalmazásakor. A fő hátrány azonban a scanf használatakor előforduló előre nem látható hibák száma. Ezért a scanf C leírását programozáskor a legjobb a szemed előtt tartani. Nagy professzionális projektekben az iostreameket használják, mivel magasabb szintű képességekkel rendelkeznek, jobban képesek a hibákat elkapni és kezelni, valamint jelentős mennyiségű információval dolgoznak. Azt is meg kell jegyezni, hogy a scanf C orosz nyelvű leírása számos online forrásban elérhető, valamint példák a használatára, a funkció kora miatt. Ezért ha szükséges, mindig megtalálhatja a választ a tematikus fórumokon.

A C/C++ Standard Library számos funkciót tartalmaz a konzolra való olvasáshoz és íráshoz (billentyűzet és monitor). Ezek a funkciók egyszerű karakterfolyamként olvasnak és írnak adatokat.

A programozásban használt folyam (folyam) fogalma szorosan összefügg e szó szokásos, mindennapi értelmezésével. A bemeneti áramlás összehasonlítható egy csővel, amelyen keresztül a víz (információ) belép a medencébe (számítógép memóriája), a kimeneti áramot - egy csővel, amelyen keresztül a víz elhagyja a medencét. Fontos tulajdonság Ez a cső az, hogy az adatok egyszerre csak egy irányba mozoghatnak. Még ha ugyanazt a csövet használjuk is a bemenethez és a kimenethez, ez nem történhet meg egyszerre: az áramlás irányának megváltoztatásához meg kell állítani, végre kell hajtani valamilyen műveletet, és csak ezután kell az áramlást az ellenkező irányba irányítani. A patak másik jellemzője, hogy szinte soha nem szárad ki. Néha kiszárad, de ez az időszak nem lehet hosszú, ha a rendszer normálisan működik.

printf() szabványos kimeneti függvény

A printf() függvény egy szabványos kimeneti függvény. Ezzel a funkcióval karaktersorozatot, számot, változó értéket jeleníthet meg a monitor képernyőjén...

A printf() függvény prototípusa az stdio.h fájlban található
int printf(char *control string, ...);

Ha sikeres, a printf() függvény visszaadja a kinyomtatott karakterek számát.

A vezérlőkarakterlánc kétféle információt tartalmaz: a közvetlenül a képernyőn megjelenő karaktereket és az argumentumok kiadásának módját meghatározó formátum-specifikációkat.

A printf() függvény egy formázott kimeneti függvény. Ez azt jelenti, hogy a függvényparaméterekben meg kell adni a kiadandó adatok formátumát. Az adatformátumot a formátumspecifikátorok határozzák meg. A formátummeghatározó egy % karakterrel kezdődik, amelyet egy formátumkód követ.

Formátum specifikációk:

%Val vel szimbólum
%d egész decimális szám
%én egész decimális szám
%e decimális szám x.xx e+xx formában
%E decimális szám x.xx E+xx formában
%f
%F tizedes lebegőpontos xx.xxxx
%g %f vagy %e, amelyik rövidebb
%G %F vagy %E, amelyik rövidebb
%o nyolcas szám
%s karakterlánc
%u előjel nélküli decimális szám
%x hexadecimális szám
%X hexadecimális szám
%% szimbólum %
%p mutató
%n mutató

Ezenkívül az l és h módosítók alkalmazhatók a formázási parancsokra.

%ld nyomtatás hosszú int
%HU nyomtat rövid aláírás nélküli
%Lf hosszú dupla nyomtatás

A formátummeghatározóban a % szimbólum után adható meg a pontosság (a tizedesvessző utáni számjegyek száma). A pontosság a következőképpen van beállítva: %.n<код формата>. Ahol n a tizedesvessző utáni számjegyek száma, és<код формата>- a fenti kódok egyike.

Például, ha van egy x=10,3563 float típusú változónk, és az értékét 3 tizedesjegy pontossággal akarjuk megjeleníteni, akkor a következőt kell írnunk:

printf("x változó = %.3f",x);

Eredmény:
x változó = 10,356

Megadhatja a nyomtatandó margó minimális szélességét is. Ha a karakterlánc vagy szám nagyobb, mint a megadott mezőszélesség, akkor a karakterlánc vagy szám teljes egészében kinyomtatásra kerül.

Például ha ezt írod:

printf("%5d",20);

akkor az eredmény ez lesz:
20

Vegye figyelembe, hogy a 20-as számot nem a sor elejétől nyomtatták ki. Ha azt szeretné, hogy a mező nem használt helyei nullákkal legyenek kitöltve, akkor a mező szélessége elé 0 karaktert kell tenni.

Például:

printf("%05d",20);

Eredmény:
00020

Az adatformátum-meghatározókon kívül a vezérlőkarakterek vezérlőkaraktereket is tartalmazhatnak:

\b BS, alsó lyuk
\f Új oldal, oldalfordítás
\n Új sor, soremelés
\r Kocsi vissza
\t Vízszintes fül
\v Függőleges fül
\" kettős idézet
\" Aposztróf
\\ Hátsó perjel
\0 Null karakter, null byte
\a Jel
\N Oktális állandó
\xN Hexadecimális állandó
\? Kérdőjel

Leggyakrabban a \n karaktert használja. Ezzel a vezérlőkarakterrel új sorra ugorhat. Nézze meg a programok példáit, és mindent megért.

Program példák.

/* 1. példa */
#beleértve

void main(void)
{
int a,b,c; // Közlemény a,b,c változók
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

A program eredménye:
a=5, b=6, c=9

/* 2. példa */
#beleértve

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

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

Printf("Objektum koordináták: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

A program eredménye:
Objektum koordináták: x:10.50, y:130.67, z:54.00

/* 3. példa */
#beleértve

void main()
{
intx;

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

A program eredménye:
x=10

/* 4. példa */
#beleértve

void main(void)
{
printf("\"Szöveg idézőjelben\"");
printf("\nOxigéntartalom: 100%%");
}

A program eredménye:
"Szöveg idézőjelben"
Oxigéntartalom: 100%

/* 5. példa */
#beleértve

void main(void)
{
int a;

A=11; // 11 decimális egyenlő b hexadecimális
printf("a-dec=%d, a-hex=%X",a,a);
}

A program eredménye:
a-dec=11, a-hex=b

/* 6. példa */
#beleértve

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

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

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

A program eredménye:
ABC

/* 7. példa */
#beleértve

void main(void)
{
char *str="Saját karakterlánc.";

Printf("Ez %s",str);
}

A program eredménye:
Ez az én vonalam.

/* 8. példa */
#beleértve

void main(void)
{
printf("Szia!\n"); // Nyomtatás után egy új sor lesz - \n
printf("A nevem Pál."); // Ez egy új sorba kerül kinyomtatásra
}

A program eredménye:
Helló!
A nevem Pavel.

scanf() szabványos bemeneti függvény

A scanf() függvény egy formázott bemeneti függvény. Ezzel a szabványos beviteli eszközről (billentyűzetről) adhat meg adatokat. A bemenetek lehetnek egész számok, lebegőpontos számok, karakterek, karakterláncok és mutatók.

A scanf() függvény a következő prototípussal rendelkezik az stdio.h fájlban:
int scanf(char *control string);

A függvény azoknak a változóknak a számát adja vissza, amelyekhez értéket rendeltek.

A vezérlőkarakterlánc háromféle karaktert tartalmaz: formátummeghatározókat, szóközöket és egyéb karaktereket. A formátummeghatározók % karakterrel kezdődnek.

Formátum specifikációk:

Ha a scanf() függvény segítségével írunk be egy karakterláncot (%s formátummeghatározó), akkor a karakterlánc az első szóközig kerül beírásra!! azok. ha beírod a "Hello world!" a scanf() függvény használatával


scanf("%s",str);

majd beírása után a kapott karakterlánc, amely az str tömbben lesz tárolva, egy "Hello" szóból áll. A FUNKCIÓ AZ ELSŐ SZÓKÖZIG BELÉPIK EGY HÚZBA! Ha szóközt tartalmazó karakterláncokat szeretne beírni, használja a függvényt

char *gets(char *buf);

A gets() függvénnyel teljes karakterláncokat adhat meg. A gets() függvény beolvassa a karaktereket a billentyűzetről, amíg meg nem jelenik egy karakter új sor(\n). Maga az újsor karakter jelenik meg, amikor megnyomja az enter billentyűt. A függvény egy mutatót ad vissza a buf-hoz. buf - puffer (memória) a bemeneti karakterlánchoz.

Bár a gets() nem tartozik a cikk hatókörébe, írjunk egy példaprogramot, amely lehetővé teszi, hogy a billentyűzetről egy teljes sort írjon be és jelenítse meg a képernyőn.

#beleértve

void main(void)
{
szénpuffer; // tömb (puffer) a bemeneti karakterlánchoz

Gets(puffer); // írjon be egy karakterláncot, és nyomja meg az enter billentyűt
printf("%s",puffer); // kiírja a beírt karakterláncot a képernyőre
}

Még egy fontos megjegyzés! A scanf() függvény segítségével történő adatbevitelhez a változók címét kell paraméterként átadni, nem magukat a változókat. Egy változó címének lekéréséhez írja be a változó nevét az & jellel (és). A & jel a cím felvételét jelenti.

Mit jelent a cím? Megpróbálom elmagyarázni. A programban van egy változónk. Egy változó a számítógép memóriájában tárolja az értékét. Tehát a cím, amit &-vel kapunk, az a cím a számítógép memóriájában, ahol a változó értéke tárolódik.

Nézzünk egy példaprogramot, amely megmutatja, hogyan kell használni

#beleértve

void main(void)
{
intx;

Printf("Adja meg az x változót:");
scanf("%d",&x);
printf("Változó x=%d",x);
}

Most térjünk vissza a scanf() függvény vezérlősorához. Újra:

int scanf(char *control string);

A vezérlősorban lévő szóköz karakter egy vagy több szóköz kihagyására utasít a beviteli adatfolyamban. A szóközön kívül tabulátor vagy újsor karakter is elfogadható. A nem null karakter a karakter elolvasását és elvetését jelzi.

A két beviteli szám közötti elválasztó karakterek szóköz, tabulátor vagy újsor karakterek. A * a % után és a formátumkód előtt (formátummeghatározó) a megadott típusú adatok olvasására utasít, de nem az érték hozzárendelésére.

Például:

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

az 50+20 beírása i-t 50-re, j-t 20-ra állítja, és a + beolvasásra és figyelmen kívül hagyásra kerül.

A format parancs megadhatja az olvasandó legnagyobb mezőszélességet.

Például:

scanf("%5s",str);

Az első 5 karakter beolvasását határozza meg a bemeneti adatfolyamból. Ha beírja az 1234567890ABC értéket, az str tömb csak 12345-öt tartalmaz, a többi karaktert figyelmen kívül hagyja. Elválasztók: szóköz, tabulátor és újsor – karakter beírásakor a rendszer ugyanúgy kezeli őket, mint az összes többi karaktert.

Ha bármilyen más karakter is találkozik a vezérlőkarakterláncban, akkor ezek a megfelelő karakter meghatározására és kihagyására szolgálnak. 10+20 karakteres adatfolyam operátor szerint

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

x-et 10-hez, y-t 20-hoz rendeli, és kihagyja a plusz karaktereket, mert a vezérlősorban előfordulnak.

Az egyik erőteljes funkciók A scanf() függvény a keresési halmaz (scanset) beállításának lehetősége. A keresési halmaz határozza meg a karakterkészletet, amellyel a scanf() által beolvasott karakterek összehasonlításra kerülnek. A scanf() függvény addig olvassa a karaktereket, amíg előfordulnak a keresési halmazban. Ha a beírt karakter nem található a keresési halmazban, a scanf() függvény továbblép a következő formátummeghatározóra. A keresési halmazt egy szögletes zárójelbe tett karakterlista határozza meg. A nyitó zárójelet % jel előzi meg. Nézzük ezt egy példával.

#beleértve

void main(void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Adjunk meg egy karakterkészletet:
12345abcdefg456

A képernyőn a program a következőket jeleníti meg:
12345
abcdefg456

Keresési halmaz megadásakor a kötőjel karaktert is használhatjuk szóközök megadására, valamint a beviteli mező maximális szélességét.

scanf("%10", str1);

Olyan karaktereket is megadhat, amelyek nem szerepelnek a keresési készletben. E karakterek közül az elsőt egy ^ jel előzi meg. A karakterkészlet megkülönbözteti a kis- és nagybetűket.

Hadd emlékeztesselek arra, hogy a scanf () függvény használatakor a változók címét paraméterként kell átadnod neki. A fenti kódra ez volt írva:

charstr; // 80 karakteres tömb
scanf("%s",str);

Vegye figyelembe, hogy az str előtt nincs &. Ennek az az oka, hogy az str egy tömb, és a tömb neve, str, a tömb első elemére mutató mutató. Ezért a & jel nem kerül elhelyezésre. Már átadjuk a címet a scanf() függvénynek. Nos, egyszerűen fogalmazva, str az a cím a számítógép memóriájában, ahol a tömb első elemének értéke tárolva lesz.

Program példák.

1. példa
Ez a program megjeleníti a "Hány éves vagy?:" lekérdezést, és várja a bevitelt. Ha például beírja a 20-as számot, a program a "20 éves vagy." karakterláncot jeleníti meg. Amikor a scanf() függvényt meghívtuk, az age változó elé egy &-t írtunk, mivel a scanf() függvénynek szüksége van a változók címére. A scanf() függvény a beírt értéket a megadott címre írja. Esetünkben a beírt 20-as érték az életkor változó címére lesz írva.

/* 1. példa */

#beleértve

void main(void)
{
int kor;

Printf("\nHány éves vagy?:");
scanf("%d",&age);
printf("Ön %d éves.", életkor);
}

2. példa
Számológép program. Ez a számológép csak számokat tud összeadni. Ha 100+34-et ír be, akkor a program a következő eredményt adja vissza: 100+34=134.

/* 2. példa */

#beleértve

void main(void)
{
int x, y;

Printf("\nSzámológép:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

3. példa
Ez a példa bemutatja, hogyan kell beállítani az olvasási mező szélességét. Példánkban a mező szélessége öt karakter. Ha több karakterből álló karakterláncot ad meg, akkor az 5. utáni összes karakter el lesz vetve. Ügyeljen a scanf() függvényhívásra. A & jel nem előzi meg a tömbnév nevét, mert a tömbnév neve a tömb első elemének címe.

/* 3. példa */

#beleértve

void main(void)
{
charname;

Printf("\nAdja meg felhasználónevét (maximum 5 karakter):");
scanf("%5s", név);
printf("\nBeírtad: %s", név);
}

4. példa
A cikk utolsó példája bemutatja, hogyan használhatja a keresési készletet. A program elindítása után írjon be egy számot 2 és 5 között.

/* 4. példa */

#beleértve

void main(void)
{
charbal;

Printf("A pontszámod 2,3,4,5:");
scanf("%", &bal);
printf("\nScore %c", bal);
}

C++ programozási nyelv

Utolsó frissítés: 2017.08.28

A C++ programozási nyelv egy általános célú, magas szintű lefordított programozási nyelv statikus gépelés, amely sokféle alkalmazás létrehozására alkalmas. A C++ napjaink egyik legnépszerűbb és legelterjedtebb nyelve.

Gyökerei a C nyelvben rejlenek, amelyet 1969-1973 között fejlesztett ki a Bell Labs-ban Dennis Ritchie programozó. Az 1980-as évek elején a dán programozó, Bjarne Stroustrup, akkor a Bell Labsnál kifejlesztette a C++-t a C nyelv kiterjesztéseként. Valójában a C++ kezdetben egyszerűen kiegészítette a C nyelvet az objektumorientált programozás néhány jellemzőjével. Így Stroustrup először "C osztályokkal" ("C with classes") nevezte.

Később új nyelv kezdett népszerűvé válni. Új funkciókkal bővült, amelyek nemcsak a C kiegészítőjeként, hanem egy teljesen új programozási nyelvvé tették. Ennek eredményeként a "C osztályokkal" átnevezték C++-ra. És azóta mindkét nyelv egymástól függetlenül kezdett fejlődni.

A C++ egy erőteljes nyelv, amely gazdag memóriaképességeket örökölt a C-től. Ezért a C++ gyakran alkalmazza a rendszerprogramozásban, különösen a létrehozáskor operációs rendszer, illesztőprogramok, különféle segédprogramok, víruskeresők stb. A Windows egyébként többnyire C++ nyelven íródott. De csak rendszerprogramozó alkalmazás adott nyelv nincs korlátozva. A C++ bármilyen szintű programban használható, ahol fontos a sebesség és a teljesítmény. Gyakran használják létrehozásra grafikus alkalmazások, különféle alkalmazási programok. Különösen gyakran használják gazdag látványvilágú játékok létrehozására. Ráadásul az utóbbi időben egyre nagyobb lendületet vesz a mobil irány, ahol a C ++ is megtalálta a maga alkalmazását. És még a webfejlesztésben is a C++ segítségével lehet webalkalmazásokat vagy valamilyen webalkalmazásokat kiszolgáló segédszolgáltatásokat létrehozni. Általánosságban elmondható, hogy a C++ egy széles körben használt nyelv, amelyen szinte bármilyen program írható.

A C++ egy lefordított nyelv, ami azt jelenti, hogy a fordító fordít forrás C++ nyelven egy végrehajtható fájlba, amely gépi utasításokat tartalmaz. A különböző platformoknak azonban megvannak a sajátosságai, így a lefordított programokat nem lehet egyszerűen átvinni egyik platformról a másikra, és ott futni. Forráskód szintjén azonban a C++ programok többnyire hordozhatóak, hacsak nem használnak bizonyos operációs rendszer-specifikus funkciókat. A fordítók, könyvtárak és fejlesztőeszközök szinte minden elterjedt platformhoz elérhetősége pedig lehetővé teszi, hogy ugyanazt a C++ forráskódot lefordítsák ezekre a platformokra vonatkozó alkalmazásokba.

A C-vel ellentétben a C++ nyelv lehetővé teszi alkalmazások objektum-orientált stílusban történő írását, amely a programot egymással kölcsönhatásban lévő osztályok és objektumok gyűjteményeként ábrázolja. Ez leegyszerűsíti a nagyméretű alkalmazások létrehozását.

A fejlődés mérföldkövei

1979-80-ban Bjarne Stroustrup kifejlesztette a C nyelv kiterjesztését - "C osztályokkal". 1983-ban a nyelvet átnevezték C++-ra.

1985-ben megjelent a C++ nyelv első kereskedelmi verziója, valamint a "The C++ Programming Language" című könyv első kiadása, amely hivatalos szabvány hiányában ennek a nyelvnek az első leírását jelentette.

1989-ben jelent meg egy új verzió C++ 2.0, amely számos új funkciót tartalmazott. Ezt követően a nyelv viszonylag lassan fejlődött egészen 2011-ig. Ugyanakkor 1998-ban az ISO (Nemzetközi Szabványügyi Szervezet) tette először kísérletet a nyelv szabványosítására. Az első szabványt ISO/IEC 14882:1998-nak vagy röviden C++98-nak hívták. Később, 2003-ban megjelent a C++03 szabvány új verziója.

2011-ben megjelent az új C++11 szabvány, amely számos kiegészítést tartalmazott és gazdagította a C++ nyelvet. egy nagy számúj funkcionalitás. Ezt követte 2014-ben egy kisebb kiegészítés a szabványhoz, más néven C++14. A nyelv újabb kulcsfontosságú kiadását pedig 2017-re tervezik.

Fordítók és fejlesztői környezetek

A C++ nyelvű programok fejlesztéséhez fordítóprogramra van szükség – ez lefordítja a C++ forráskódját futtatható fájllá, amit aztán futtatni lehet. De jelenleg nagyon sok különböző fordító létezik. Különböző szempontok szerint eltérhetnek, különösen a szabványok végrehajtásában. A C++ fordítóprogramok alapvető listája megtalálható a wikipédián. Javasoljuk a fejlesztéshez azokat a fordítókat választani, amelyek a legújabb szabványokat fejlesztik és implementálják. Például ebben az oktatóanyagban túlnyomórészt a GNU projekt által kifejlesztett, szabadon elérhető g++ fordító lesz használatos.

Programok létrehozásához olyan IDE-ket is használhat, mint a Visual Studio, Netbeans, Eclipse, Qt stb.

A C++ programozási nyelv alapjainak és finomságainak elsajátítása. Tankönyv gyakorlati feladatokkal és tesztekkel. Szeretnél megtanulni programozni? Akkor jó helyen jár – itt ingyenes oktatás programozás. Akár van tapasztalata, akár nincs, ezek a programozási leckék segítenek abban, hogy elkezdje a C++ programok létrehozását, fordítását és hibakeresését különböző fejlesztői környezetekben: Visual Studio, Code::Blocks, Xcode vagy Eclipse.

Rengeteg példa és részletes magyarázat. Tökéletes kezdőknek (bábuknak) és haladóknak egyaránt. Minden el van magyarázva a semmitől a legapróbb részletekig. Ezek a leckék (200+) jó alapot/alapot adnak a programozás megértéséhez nem csak C ++ nyelven, hanem más programozási nyelveken is. És ez teljesen ingyenes!

Szintén figyelembe véve lépésről lépésre alkotás c++ játékok, grafikus könyvtár SFML és több mint 50 feladat, amellyel tesztelheti készségeit és tudását C++ nyelven. További bónusz a .

Repost +20 a karmának és hálám!

0. fejezetszám. Bevezetés. A munka kezdete

fejezet száma 1. A C++ alapjai

2. fejezetszám. Változók és alapvető adattípusok C++ nyelven

3. fejezetszám. Operátorok C++ nyelven

4. fejezetszám. Hatókör és más típusú változók a C++ nyelven

5. fejezetszám. A kód végrehajtásának sorrendje a programban. Cikkek, elágazások C++-ban

Ezek az oktatóanyagok mindenkinek szólnak, akár kezdő a programozásban, akár széleskörű programozási tapasztalattal rendelkezik más nyelveken! Ez az anyag azoknak szól, akik szeretnék megtanulni a C / C ++ nyelveket az alapoktól a legbonyolultabb szerkezetekig.

A C++ egy programozási nyelv, ennek a programozási nyelvnek a ismerete lehetővé teszi a számítógép vezérlését legmagasabb szint. Ideális esetben azt csinálhatja a számítógéppel, amit csak akar. Oldalunk segít a C++ programozási nyelv elsajátításában.

/IDE telepítése

Az első dolog, amit meg kell tennie, mielőtt elkezdi tanulni a C++-t, hogy megbizonyosodjon arról, hogy rendelkezik egy IDE-vel – egy integrált fejlesztői környezettel (azzal a programmal, amelyben programozni fog). Ha nincs IDE-je, akkor itt van. Amikor az IDE mellett dönt, telepítse azt, és gyakorolja az egyszerű projektek létrehozását.

Bevezetés a C++-ba

A C++ nyelv olyan parancsok halmaza, amelyek megmondják a számítógépnek, hogy mit tegyen. Ezt a parancskészletet általában forráskódnak vagy csak kódnak nevezik. A parancsok vagy "függvények" vagy " kulcsszavakat". A kulcsszavak (C/C++ fenntartott szavak) a nyelv alapvető építőkövei. A függvények összetett építőelemek, mert egyszerűbb függvények alapján írják őket, ahogy az alábbi legelső programunkban is látható. Ez a függvénystruktúra egy könyv tartalmához hasonlít. A tartalomjegyzékben megjelenhetnek a könyv fejezetei, a könyvben minden fejezetnek saját, bekezdésekből álló tartalomjegyzéke, minden bekezdésnek saját albekezdései lehetnek. Bár a C++ sok mindent biztosít közös funkciókatés fenntartott szavakat, amelyeket használhat, továbbra is meg kell írnia saját függvényeit.

A program melyik részében indultál? A C++-ban minden programnak van egy függvénye, ezt nevezik fő vagy főfüggvénynek, a program végrehajtása ezzel a függvénnyel kezdődik. Tól től fő funkció, bármilyen más függvényt is meghívhatunk, akár mi írtuk, akár – mint korábban említettük – a fordító által biztosított.

Tehát hogyan érheti el ezeket a szabványos funkciókat? Hozzáférni alapfelszereltség a fordítóhoz mellékelt fejlécfájlt az előfeldolgozó direktíva segítségével – #include . Miért hatásos? Nézzünk egy példát munkaprogram:

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

Nézzük meg közelebbről a program elemeit. Az #include egy "előfeldolgozó" direktíva, amely arra utasítja a fordítót, hogy a végrehajtható fájl létrehozása előtt tegye be a programunkba az iostream fejlécfájl kódját. Egy fejlécfájllal a programban számos különféle funkcióhoz férhet hozzá, amelyeket a programjában használhat. Például a cout utasításhoz egy iostream szükséges. A névteret használó sor std; utasítja a fordítót, hogy olyan függvénycsoportot használjon, amely az std standard könyvtár részét képezi. Ez a sor lehetővé teszi a program számára olyan operátorok használatát is, mint például a cout. A pontosvessző a C++ szintaxis része. Azt mondja a fordítónak, hogy ez a parancs vége. Kicsit később látni fogja, hogy a pontosvessző a legtöbb parancs lezárására szolgál a C++-ban.

A program következő fontos sora az int main() . Ez a sor közli a fordítóval, hogy van egy main nevű függvény, és a függvény egy int típusú egész számot ad vissza. A göndör kapcsos zárójelek ( és ) jelzik egy függvény kezdetét (és végét). A göndör kapcsos zárójeleket más kódblokkokban is használják, de mindig ugyanazt jelentik - a blokk elejét és végét.

A C++ nyelvben a cout objektum szöveg megjelenítésére szolgál (ejtsd: "cout"). Karaktereket használ<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

A következő parancs a cin.get() . Ez egy másik függvényhívás, amely adatokat olvas be a bemeneti adatfolyamból, és várja az ENTER billentyű lenyomását. Ez a parancs megakadályozza, hogy a konzolablak bezáruljon az ENTER billentyű lenyomásáig. Ez időt ad arra, hogy megnézze a program kimenetét.

A fő függvény (a záró göndör kapcsos zárójel) végére érve programunk 0 értéket ad vissza az operációs rendszerre. Ez a visszatérési érték azért fontos, mert elemzésével az operációs rendszer meg tudja ítélni, hogy programunk sikeresen befejeződött-e vagy sem. A 0 visszatérési érték sikert jelent, és automatikusan visszaküldésre kerül (de csak az int adattípus esetén, más függvények megkövetelik az érték manuális visszaadását), de ha valami mást, például 1-et akarunk visszaadni, akkor azt kézzel kell megtennünk. .

#beleértve névtér használata std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Az anyag összevonásához írja be a programkódot az IDE-be, és futtassa. Miután a program lefutott, és látta a kimenetet, kísérletezzen egy kicsit a cout utasítással. Ez segít megszokni a nyelvet.

Mindenképpen kommenteld a programjaidat!

Írjon megjegyzéseket a kódhoz, hogy ne csak saját maga, hanem mások számára is érthetőbb legyen. A fordító figyelmen kívül hagyja a megjegyzéseket a kód végrehajtásakor, ami lehetővé teszi tetszőleges számú megjegyzés felhasználását a tényleges kód leírására. Megjegyzés létrehozásához használja a // gombot, amely azt mondja a fordítónak, hogy a sor többi része megjegyzés, vagy a /* karaktert, amelyet */ követ. Amikor programozni tanul, hasznos, ha megjegyzéseket tud fűzni a kód bizonyos szakaszaihoz, hogy lássa, hogyan változik a program eredménye. A kommentelés technikájáról részletesen olvashat.

Mi a teendő az ilyen típusú változókkal?

Néha zavaró lehet a több változótípus használata, amikor úgy tűnik, hogy egyes változótípusok feleslegesek. Nagyon fontos a megfelelő változótípus használata, mivel egyes változók több memóriát igényelnek, mint mások. Ezenkívül a lebegőpontos számok memóriában való tárolásának módja miatt a lebegőpontos és a dupla adattípusok "pontatlanok", és nem használhatók, ha pontos egész értéket kell tárolni.

Változók deklarálása C++ nyelven

Változó deklarálásához használja a szintaktikai típust<имя>; . Íme néhány példa a változók deklarációira:

int szám; karakter; float num_float;

Egy sorban több azonos típusú változó deklarálható, ehhez mindegyiket vesszővel kell elválasztani.

int x, y, z, d;

Ha alaposan megnézted, láthattad, hogy a változódeklarációt mindig pontosvessző követi. A konvencióról bővebben olvashat - "a változók elnevezéséről".

Gyakori hibák a változók deklarálásakor C++ nyelven

Ha olyan változót próbál meg használni, amely nincs deklarálva, akkor a program nem fog lefordítani, és hibaüzenetet kap. A C++ nyelven minden kulcsszó, minden függvény és minden változó megkülönbözteti a kis- és nagybetűket.

Változók használata

Tehát most már tudja, hogyan kell egy változót deklarálni. Íme egy példaprogram, amely bemutatja egy változó használatát:

#beleértve névtér használata std; int main() ( int szám; cout<< "Введите число: "; cin >>szám; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Vessünk egy pillantást erre a programra, és tanulmányozzuk sorról sorra a kódját. Az int kulcsszó szerint ez a szám egész szám. A cin >> funkció beolvassa az értéket számban, a felhasználónak a beírt szám után entert kell nyomnia. A cin.ignore() egy olyan függvény, amely beolvas egy karaktert, és figyelmen kívül hagyja azt. Bevitelünket rendszereztük a programba, egy szám beírása után megnyomjuk az ENTER billentyűt, azt a karaktert, amely szintén átkerül a bemeneti adatfolyamba. Nincs rá szükségünk, ezért eldobjuk. Ne feledje, hogy a változó egész típusúnak lett deklarálva, ha a felhasználó decimális számot próbál beírni, az csonkolásra kerül (azaz a szám tizedes részét figyelmen kívül hagyja). Próbáljon meg tízes számot vagy karaktersorozatot beírni a példaprogram futtatásakor, a válasz a bemeneti értéktől függ.

Vegye figyelembe, hogy a változóból történő nyomtatáskor nem használunk idézőjeleket. Az idézőjelek hiánya jelzi a fordítónak, hogy van egy változó, és ezért a programnak ellenőriznie kell a változó értékét, hogy a változó nevét lecserélje az értékére a végrehajtás során. Több műszakoperátor ugyanazon a sorban teljesen elfogadható, és a kimenet ugyanabban a sorrendben történik. Külön kell választania a karakterlánc-literálokat (idézőjeles karakterláncok) és a változókat, így mindegyiknek más-más shift operátort kell megadnia<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Értékek megváltoztatása, összehasonlítása

Természetesen függetlenül attól, hogy milyen adattípust használunk, a változók kevéssé érdekesek, hacsak nem módosítható az értékük. Az alábbiakban néhány változóval együtt használt operátor látható:

  • * szorzás,
  • - kivonás,
  • + kiegészítés,
  • / osztály,
  • = megbízás,
  • == egyenlőség,
  • > több
  • < меньше.
  • != nem egyenlő
  • >= nagyobb vagy egyenlő
  • <= меньше или равно

A matematikai függvényeket végrehajtó operátorokat a hozzárendelési jeltől jobbra kell használni, hogy az eredményt a bal oldali változóhoz rendeljük.

Íme néhány példa:

A = 4*6; // használja a sor megjegyzését és pontosvesszőjét, a értéke 24 a = a + 5; // egyenlő az eredeti érték és öt összegével a == 5 // nincs hozzárendelve öt, ellenőrizze, és egyenlő 5-tel vagy nem

Gyakran használja a ==-t konstrukciókban, például feltételes utasításokban és ciklusokban.

A< 5 // Проверка, a менее пяти? a >5 // Ellenőrizze, hogy a nagyobb-e, mint öt? a == 5 // Ellenőrizze, hogy a öt? a != 5 // Ellenőrizze, hogy a nem egyenlő-e öttel? a >= 5 // Ellenőrizze, hogy a nagyobb-e vagy egyenlő-e öttel? a<= 5 // Проверка, a меньше или равно пяти?

Ezek a példák nem mutatják túl egyértelműen az összehasonlító jelek használatát, de amikor elkezdjük tanulmányozni a kiválasztási operátorokat, megérti, miért van erre szükség.



Betöltés...
Top