Všeobecné charakteristiky c. Scanf C Popis funkcie

Tento článok pojednáva o funkcii scanf() v všeobecný pohľad bez odkazu na konkrétny štandard, preto sú tu zahrnuté údaje z akýchkoľvek noriem C99, C11, C++11, C++14. Možno, že v niektorých normách funkcia funguje s rozdielmi od materiálu uvedeného v článku.

scanf C funkcia - popis

scanf() je funkcia nachádzajúca sa v hlavičkových súboroch stdio.h(C) a cstdio(C++), tiež známa ako formátovaný vstup programu. scanf načítava znaky zo štandardného vstupného toku (stdin) a konvertuje ich podľa formátu, potom ich zapíše do určených premenných. Formát – znamená, že údaje sa po prijatí prevedú do určitej podoby. Takže funkcia scanf C je opísaná:

scanf("%formát", &premenná1[, &premenná2,[…]]),

kde sa premenné odovzdávajú ako adresy. Dôvod tohto spôsobu odovzdávania premenných do funkcie je zrejmý: v dôsledku práce vracia hodnotu označujúcu prítomnosť chýb, takže jediným spôsobom, ako zmeniť hodnoty premenných, je prejsť podľa adresy. Aj vďaka tejto metóde môže funkcia spracovať dáta akéhokoľvek typu.

Niektorí programátori označujú funkcie ako scanf() alebo printf() ako procedúry z dôvodu analógie s inými jazykmi.

Scanf vám umožňuje zadávať všetky základné typy jazyka: char, int, float, string atď. V prípade premenných typu string nie je potrebné uvádzať znamienko adresy - "&", keďže premenná typu string je pole a jej názov je adresa prvého prvku poľa v pamäti počítača. .

Vstupný formát alebo riadiaci reťazec

Začnime tým, že sa pozrieme na príklad použitia funkcie scanf C z popisu.

#include int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; //požiadavka pre linuxové systémy )

Vstupný formát pozostáva z nasledujúcich štyroch parametrov: %[*][width][modifikátory] typ. V tomto prípade je znak "%" a typ povinnými parametrami. To znamená, že minimálna forma formátu vyzerá takto: „%s“, „%d“ atď.

Vo všeobecnosti sa znaky, ktoré tvoria formátovací reťazec, delia na:

  • špecifikátory formátu - všetko, čo začína znakom %;
  • oddeľovač alebo medzery - sú to medzera, tabulátor (\t), nový riadok (\n);
  • iné znaky ako medzery.

Funkcia nemusí byť bezpečná.

Namiesto scanf() použite funkciu scanf_s().

(správa od vizuálne štúdio)

Zadajte alebo formátujte špecifikátory alebo znaky konverzie alebo riadiace znaky

Deklarácia scanf C musí obsahovať minimálne špecifikátor formátu, ktorý je uvedený na konci výrazov začínajúcich znakom "%". Hovorí programu, aký typ údajov má očakávať pri zadávaní, zvyčajne z klávesnice. Zoznam všetkých špecifikátorov formátu v tabuľke nižšie.

Význam

Program čaká na zadanie znaku. Premenná, ktorá sa má zapísať, musí byť typu char.

Program očakáva zadanie desiatkového celého čísla. Premenná musí byť typu int.

Program očakáva zadanie čísla s pohyblivou rádovou čiarkou (čiarkou) v exponenciálnom tvare. Premenná musí byť typu float.

Program očakáva zadanie čísla s pohyblivou rádovou čiarkou (čiarka). Premenná musí byť typu float.

7

Program očakáva zadanie čísla s pohyblivou rádovou čiarkou (čiarka). Premenná musí byť typu float.

Program očakáva zadanie osmičkového čísla. Premenná musí byť typu int.

Program čaká na zadanie reťazca. Reťazec je množina ľubovoľných znakov až po prvý znak oddeľovača, s ktorým sa stretol. Premenná musí byť typu string.

Program očakáva zadanie hexadecimálneho čísla. Premenná musí byť typu int.

Premenná očakáva vstup ukazovateľa. Premenná musí byť typu ukazovateľ.

Zapíše do premennej celočíselnú hodnotu rovnajúcu sa počtu doteraz prečítaných znakov funkciou scanf.

Program prečíta celé číslo bez znamienka. Typ premennej musí byť celé číslo bez znamienka.

Program očakáva zadanie binárneho čísla. Premenná musí byť typu int.

Sada znakov, ktoré sa majú skenovať. Program čaká na zadanie znakov, z obmedzeného fondu zadaného medzi scanf bude fungovať, pokiaľ budú na vstupnom toku znaky zo zadanej množiny.

Znaky vo formátovacom reťazci

Symbol hviezdičky (*)

Hviezdička (*) je príznak označujúci, že operácia priradenia by mala byť potlačená. Hneď za znakom "%" sa umiestni hviezdička. Napríklad,

Scanf("%d%*c%d", &x, &y); //ignoruje znak medzi dvoma celými číslami. scanf("%s%*d%s", str, str2); //ignoruje celé číslo medzi dvoma reťazcami.

To znamená, že ak do konzoly zadáte riadok „45-20“, program vykoná nasledovné:

  1. Premennej "x" bude priradená hodnota 45.
  2. Premennej "y" bude priradená hodnota 20.
  3. A znamienko mínus (pomlčka) "-" bude ignorované vďaka "%*c".

Šírka (alebo šírka okraja)

Toto je celé číslo medzi znakom "%" a špecifikátorom formátu, ktorý špecifikuje maximálne množstvo znaky na čítanie pre aktuálnu operáciu čítania.

Je potrebné mať na pamäti niekoľko dôležitých bodov:

  1. scanf sa preruší, ak narazí na oddeľovací znak, aj keď nepočítal 20 znakov.
  2. Ak zadáte viac ako 20 znakov, do str sa zapíše iba prvých 20 znakov.

Modifikátory typu (alebo presnosť)

Toto sú špeciálne príznaky, ktoré upravujú typ údajov očakávaných pre vstup. Príznak je špecifikovaný naľavo od špecifikátora typu:

  • L alebo l (malé L) Keď sa použije "l" so špecifikátormi d, i, o, u, x, príznak hovorí programu, že sa očakáva vstup typu long int. Pri použití "l" so špecifikátorom e alebo f príznak hovorí programu, že by mal očakávať dvojnásobnú hodnotu. Použitie "L" hovorí programu, že sa očakáva dlhé zdvojnásobenie. Použitie "l" so špecifikátormi "c" a "s" hovorí programu, že sa očakávajú dvojbajtové znaky ako wchar_t. Napríklad "%lc", "%ls", "%l".
  • h je príznak označujúci krátky typ.
  • hh - označuje, že premenná je ukazovateľ na hodnotu typu signed char alebo unsigned char. Príznak možno použiť so špecifikátormi d, i, o, u, x, n.
  • ll (dve malé L) označuje, že premenná je ukazovateľ na hodnotu typu sign int alebo unsigned long long int. Príznak sa používa so špecifikátormi: d, i, o, u, x, n.
  • j - označuje, že premenná je ukazovateľ na typ intmax_t alebo uintmax_t z hlavičkového súboru stdint.h. Používa sa so špecifikátormi: d, i, o, u, x, n.
  • z - označuje, že premenná je ukazovateľ na typ size_t, ktorého definícia je v stddef.h. Používa sa so špecifikátormi: d, i, o, u, x, n.
  • t - označuje, že premenná je ukazovateľ na typ ptrdiff_t. Definícia pre tento typ je v stddef.h. Používa sa so špecifikátormi: d, i, o, u, x, n.

Jasnejšie, obrázok s modifikátormi môže byť prezentovaný vo forme tabuľky. Takýto popis scanf C pre programátorov bude prehľadnejší.

Iné postavy

Všetky znaky nájdené vo formáte budú vyradené. Je potrebné poznamenať, že prítomnosť medzier alebo oddeľovacích znakov (nový riadok, medzera, tabulátor) v riadiacom reťazci môže viesť k odlišnému správaniu funkcie. V jednej verzii bude scanf() čítať bez uloženia akéhokoľvek počtu oddeľovačov, kým nenarazí na iný znak ako oddeľovač, a v inej verzii nehrajú medzery (iba tie) žiadnu rolu a výraz "%d + %d" je ekvivalentné "% d+%d".

Príklady

Zoberme si niekoľko príkladov, ktoré vám umožnia premýšľať a presnejšie pochopiť fungovanie funkcie.

scanf("%3s", str); //ak zadáte do konzoly reťazec "1d2s3d1;3", do str scanf("%dminus%d", &x, &y) sa zapíše iba "1d2"); //mínusové znaky medzi dvoma číslami budú vyradené scanf("%5", str); // znaky sa budú zadávať do str, kým nebude 5 znakov a znaky budú čísla od 0 do 9. scanf("%lf", &d); //očakávame dvojitý vstup scanf("%hd", &x); //očakávané číslo typu short scanf("%hu", &y); //očakávame číslo bez znamienka short scanf("lx", &z); //očakávané číslo typu long int

Z uvedených príkladov môžete vidieť, ako sa očakávaný počet mení pomocou rôzne symboly.

scanf C - popis pre začiatočníkov

Táto časť bude užitočná pre začiatočníkov. Často musíte mať po ruke nie tak veľa Celý popis scanf C koľko podrobností o tom, ako funkcia funguje.

  • Táto funkcia je trochu zastaraná. V knižniciach existuje niekoľko rôznych implementácií rôzne verzie. Napríklad vylepšená funkcia scanf S C, ktorej popis nájdete na stránke microsoft.
  • Počet špecifikátorov vo formáte sa musí zhodovať s počtom argumentov odovzdaných funkcii.
  • Prvky vstupného toku musia byť oddelené iba oddeľovacími znakmi: medzera, tabulátor, nový riadok. Čiarka, bodkočiarka, bodka atď. – tieto znaky nie sú oddeľovače pre funkciu scanf().
  • Ak scanf narazí na oddeľovací znak, vstup sa zastaví. Ak existuje viac ako jedna premenná na čítanie, potom scanf prejde na čítanie ďalšej premennej.
  • Najmenšia nekonzistentnosť vo formáte vstupných údajov vedie k nepredvídateľným výsledkom programu. No, ak program práve skončí s chybou. Ale často program pokračuje v práci a robí to zle.
  • scanf("%20s...",...); Ak vstupný tok presiahne 20 znakov, potom scanf prečíta prvých 20 znakov a buď preruší alebo prejde na čítanie ďalšej premennej, ak je špecifikovaná. V tomto prípade bude ďalšie volanie scanf pokračovať v čítaní vstupného toku od bodu, kde sa práca predchádzajúceho volania scanf zastavila. Ak sa pri čítaní prvých 20 znakov vyskytne oddeľovací znak, scanf sa preruší alebo prejde na čítanie ďalšej premennej, aj keď neprečítal 20 znakov pre prvú premennú. V tomto prípade budú všetky neprečítané znaky pripojené k ďalšej premennej.
  • Ak sada naskenovaných znakov začína znakom "^", potom scanf bude čítať dáta, kým nenarazí na oddeľovací znak alebo znak zo sady. Napríklad „%[^A-E1-5]“ bude čítať údaje z prúdu, kým nenájdete jedno z veľkých anglických znakov od A do E alebo jedno z čísel od 1 do 5.
  • Funkcia scanf C podľa definície vracia číslo, ktoré sa rovná počtu úspešných zápisov do premenných. Ak scanf zapíše 3 premenné, potom úspešný výsledok funkcie vráti číslo 3. Ak scanf nemohol zapísať žiadne premenné, potom bude výsledok 0. A nakoniec, ak sa scanf z nejakého dôvodu nemohol vôbec spustiť, výsledkom bude EOF .
  • Ak funkcia scanf() dokončila svoju prácu nesprávne. Napríklad scanf("%d", &x) - číslo bolo očakávané, ale vstup prijal znaky. Ďalšie volanie funkcie scanf() sa začne v bode vstupného toku, kde sa skončilo predchádzajúce volanie funkcie. Na prekonanie tohto problému je potrebné zbaviť sa problémových postáv. Dá sa to urobiť napríklad volaním scanf("%*s"). To znamená, že funkcia prečíta reťazec znakov a zahodí ho. Týmto ošemetným spôsobom môžete pokračovať v zadávaní potrebných údajov.
  • Niektoré implementácie scanf() neumožňujú skenovanie "-" v znakovej sade.
  • Špecifikátor "%c" číta každý znak zo streamu. To znamená, že prečíta aj oddeľovací znak. Ak chcete preskočiť znak oddeľovača a pokračovať v čítaní požadovaného znaku, môžete použiť "%1s".
  • Pri použití špecifikátora "c" je prijateľné použiť šírku "%10c", ale potom vo forme funkčná premenná scanf potrebuje odovzdať pole prvkov typu char.
  • „%“ znamená „všetky malé písmená anglickej abecedy“ a „%“ znamená iba 3 znaky: „z“, „a“, „-“. Inými slovami, znak „-“ znamená rozsah iba vtedy, ak je medzi dvoma znakmi, ktoré sú v správnom poradí. Ak je znak „-“ na konci výrazu, na začiatku alebo v nesprávnom poradí znakov na oboch jeho stranách, potom ide len o znak pomlčky, nie o rozsah.

Záver

Týmto končím popis scanf C. Toto je pekná šikovná funkcia na prácu malé programy a pri použití procedurálnej metódy programovania. Hlavnou nevýhodou je však množstvo nepredvídateľných chýb, ktoré môžu pri používaní scanf nastať. Preto je najlepšie mať popis scanf C pri programovaní na očiach. Vo veľkých profesionálnych projektoch sa využívajú iostreamy, vďaka tomu, že disponujú možnosťami vyššej úrovne, dokážu lepšie zachytiť a zvládnuť chyby, ako aj pracovať s významným množstvom informácií. Treba tiež poznamenať, že popis scanf C v ruštine je k dispozícii na mnohých online zdrojoch, ako aj príklady jeho použitia, vzhľadom na vek funkcie. Preto v prípade potreby vždy nájdete odpoveď na tematických fórach.

Štandardná knižnica C/C++ obsahuje množstvo funkcií na čítanie a zápis do konzoly (klávesnica a monitor). Tieto funkcie čítajú a zapisujú dáta ako jednoduchý prúd znakov.

Pojem prúd (stream), používaný v programovaní, úzko súvisí s bežným, každodenným chápaním tohto slova. Vstupný prúd možno porovnať s potrubím, ktorým voda (informácie) vstupuje do bazéna (pamäť počítača), výstupný prúd - s potrubím, ktorým voda opúšťa bazén. Dôležitá vlastnosť Tento kanál spočíva v tom, že údaje sa môžu súčasne pohybovať iba jedným smerom. Aj keď sa na vstup a výstup použije to isté potrubie, nemôže sa to stať súčasne: ak chcete zmeniť smer toku, musíte ho zastaviť, vykonať nejakú akciu a až potom nasmerovať tok opačným smerom. Ďalšou vlastnosťou potoka je, že takmer nikdy nevysychá. Niekedy vyschne, ale toto obdobie nemôže byť dlhé, ak systém funguje normálne.

štandardná výstupná funkcia printf().

Funkcia printf() je štandardná výstupná funkcia. Pomocou tejto funkcie môžete na obrazovke monitora zobraziť reťazec znakov, číslo, premennú hodnotu...

Funkcia printf() má prototyp v súbore stdio.h
int printf(char *riadiaci retazec, ...);

Ak je úspešná, funkcia printf() vráti počet vytlačených znakov.

Riadiaci reťazec obsahuje dva typy informácií: znaky, ktoré sa priamo zobrazujú na obrazovke, a špecifikátory formátu, ktoré určujú spôsob výstupu argumentov.

Funkcia printf() je formátovaná výstupná funkcia. To znamená, že v parametroch funkcie je potrebné špecifikovať formát výstupných údajov. Formát údajov je určený špecifikátormi formátu. Špecifikátor formátu začína znakom %, za ktorým nasleduje kód formátu.

Špecifikátory formátu:

%S symbol
%d celé desiatkové číslo
%i celé desiatkové číslo
%e desatinné číslo v tvare x.xx e+xx
%E desatinné číslo v tvare x.xx E+xx
%f
%F desatinná desatinná čiarka xx.xxxx
%g %f alebo %e podľa toho, čo je kratšie
%G %F alebo %E podľa toho, čo je kratšie
%o osmičkové číslo
%s znakový reťazec
%u desiatkové číslo bez znamienka
%X hexadecimálne číslo
%X hexadecimálne číslo
%% symbol %
%p ukazovateľ
%n ukazovateľ

Okrem toho je možné na príkazy formátovania použiť modifikátory l a h.

%ld tlačiť dlhý int
%hu vytlačiť krátke nepodpísané
%Lf tlačiť dlhé dvojité

V špecifikátore formátu za symbolom % možno zadať presnosť (počet číslic za desatinnou čiarkou). Presnosť je nastavená nasledovne: %.n<код формата>. kde n je počet číslic za desatinnou čiarkou a<код формата>- jeden z vyššie uvedených kódov.

Napríklad, ak máme premennú x=10,3563 typu float a chceme jej hodnotu zobraziť s presnosťou na 3 desatinné miesta, mali by sme napísať:

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

výsledok:
Premenná x = 10,356

Môžete tiež určiť minimálnu šírku okraja, ktorý sa má vytlačiť. Ak je reťazec alebo číslo väčšie ako špecifikovaná šírka poľa, vytlačí sa celý reťazec alebo číslo.

Napríklad, ak napíšete:

printf("%5d",20);

potom výsledok bude:
20

Všimnite si, že číslo 20 nebolo vytlačené od samého začiatku riadku. Ak chcete, aby boli nevyužité miesta poľa vyplnené nulami, potom musíte pred šírku poľa umiestniť znak 0.

Napríklad:

printf("%05d",20);

výsledok:
00020

Okrem špecifikátorov formátu údajov môže riadiaci reťazec obsahovať riadiace znaky:

\b BS, spodná diera
\f Nová stránka, preklad stránky
\n Nový riadok, posun riadku
\r Vrátenie vozíka
\t Vodorovná karta
\v Vertikálna karta
\" dvojitý citát
\" Apostrof
\\ Spätné lomítko
\0 Null znak, null byte
\a Signál
\N Osmičková konštanta
\xN Hexadecimálna konštanta
\? Otáznik

Najčastejšie budete používať znak \n. S touto riadiacou postavou budete môcť preskočiť na nový riadok. Pozrite si príklady programov a všetko pochopíte.

Príklady programov.

/* Príklad 1 */
#include

void main (void)
{
int a, b, c; // Oznámenie premenné a,b,c
a = 5;
b = 6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Výsledok programu:
a=5, b=6, c=9

/* Príklad 2 */
#include

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

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

Printf("Súradnice objektu: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Výsledok programu:
Súradnice objektu: x:10,50, y:130,67, z:54,00

/* Príklad 3 */
#include

void main()
{
intx;

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

Výsledok programu:
x=10

/* Príklad 4 */
#include

void main (void)
{
printf("\"Text v úvodzovkách\"");
printf("\nObsah kyslíka: 100%%");
}

Výsledok programu:
"Text v úvodzovkách"
Obsah kyslíka: 100%

/* Príklad 5 */
#include

void main (void)
{
int a;

A = 11; // 11 v desiatkovej sústave sa rovná b v hex
printf("a-dec=%d, a-hex=%X",a,a);
}

Výsledok programu:
a-dec=11, a-hex=b

/* Príklad 6 */
#include

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

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

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

Výsledok programu:
ABC

/* Príklad 7 */
#include

void main (void)
{
char *str="Môj reťazec.";

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

Výsledok programu:
Toto je moja linka.

/* Príklad 8 */
#include

void main (void)
{
printf("Ahoj!\n"); // Po vytlačení bude nový riadok - \n
printf("Volám sa Paul."); // Toto sa vytlačí na nový riadok
}

Výsledok programu:
Ahoj!
Volám sa Pavel.

štandardná vstupná funkcia scanf().

Funkcia scanf() je formátovaná vstupná funkcia. Pomocou neho môžete zadávať údaje zo štandardného vstupného zariadenia (klávesnice). Vstupmi môžu byť celé čísla, čísla s pohyblivou rádovou čiarkou, znaky, reťazce a ukazovatele.

Funkcia scanf() má v stdio.h nasledujúci prototyp:
int scanf(char *riadiaci retazec);

Funkcia vráti počet premenných, ktorým bola priradená hodnota.

Riadiaci reťazec obsahuje tri druhy znakov: špecifikátory formátu, medzery a iné znaky. Špecifikátory formátu začínajú znakom %.

Špecifikátory formátu:

Pri zadávaní reťazca pomocou funkcie scanf() (špecifikátor formátu %s) sa reťazec zadáva až po prvú medzeru!! tie. ak zadáte reťazec "Ahoj svet!" pomocou funkcie scanf().


scanf("%s",str);

potom po zadaní výsledného reťazca, ktorý bude uložený v poli str, bude pozostávať z jedného slova "Ahoj". FUNKCIA VSTUPUJE DO STRUNCA AŽ DO PRVÉHO PRIESTORU! Ak chcete zadať reťazce s medzerami, použite funkciu

char *gets(char *buf);

Pomocou funkcie gets() môžete zadať celé reťazce. Funkcia get() číta znaky z klávesnice, kým sa neobjaví znak Nový riadok(\n). Samotný znak nového riadku sa zobrazí po stlačení klávesu Enter. Funkcia vráti ukazovateľ na buf. buf - vyrovnávacia pamäť (pamäť) pre vstupný reťazec.

Hoci get() je mimo rámca tohto článku, napíšme si príklad programu, ktorý vám umožní zadať celý riadok z klávesnice a zobraziť ho na obrazovke.

#include

void main (void)
{
tlmič uhlia; // pole (buffer) pre vstupný reťazec

Gets(buffer); // zadajte reťazec a stlačte enter
printf("%s",buffer); // výstup zadaného reťazca na obrazovku
}

Ďalšia dôležitá poznámka! Ak chcete zadať údaje pomocou funkcie scanf(), musíte zadať adresy premenných ako parametre a nie samotné premenné. Ak chcete získať adresu premennej, pred názov premennej zadajte & (ampersand). Znak & znamená prijatie adresy.

Čo znamená adresa? Pokúsim sa vysvetliť. V programe máme premennú. Premenná ukladá svoju hodnotu do pamäte počítača. Takže adresa, ktorú dostaneme pomocou & je adresa v pamäti počítača, kde je uložená hodnota premennej.

Pozrime sa na príklad programu, ktorý nám ukazuje, ako používať &

#include

void main (void)
{
intx;

Printf("Zadajte premennu x:");
scanf("%d"&x);
printf("Premenna x=%d",x);
}

Teraz sa vráťme k riadiacemu riadku funkcie scanf(). znova:

int scanf(char *riadiaci retazec);

Medzera v riadiacom riadku dáva pokyn na preskočenie jednej alebo viacerých medzier vo vstupnom toku. Okrem medzery je možné akceptovať aj znak tabulátora alebo nového riadku. Znak, ktorý nie je nulový, označuje prečítanie a vyradenie tohto znaku.

Oddeľovače medzi dvoma vstupnými číslami sú znaky medzery, tabulátora alebo nového riadku. Znak * za % a pred kódom formátu (špecifikátor formátu) inštruuje čítať údaje určeného typu, ale nie priradiť túto hodnotu.

Napríklad:

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

zadanie 50+20 nastaví i na 50, j na 20 a + sa prečíta a ignoruje.

Príkaz format môže určiť najväčšiu šírku poľa, ktoré sa má čítať.

Napríklad:

scanf("%5s",str);

určuje čítanie prvých 5 znakov zo vstupného toku. Ak zadáte 1234567890ABC, pole str bude obsahovať iba 12345, ostatné znaky budú ignorované. Oddeľovače: medzera, tabulátor a nový riadok – pri zadávaní znaku sa s nimi zaobchádza ako so všetkými ostatnými znakmi.

Ak sa v riadiacom reťazci vyskytnú nejaké iné znaky, sú určené na určenie a preskočenie zodpovedajúceho znaku. 10plus20 znakový prúd podľa operátora

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

priradí x 10, y 20 a preskočí plusové znaky, pretože sa vyskytujú na kontrolnom riadku.

Jeden z výkonné funkcie funkcia scanf() je schopnosť nastaviť vyhľadávaciu množinu (scanset). Vyhľadávacia množina definuje množinu znakov, s ktorými sa budú porovnávať znaky načítané pomocou scanf(). Funkcia scanf() číta znaky, pokiaľ sa vyskytujú vo vyhľadávacej množine. Keď sa zadaný znak nenájde vo vyhľadávacej sade, funkcia scanf() prejde na ďalší špecifikátor formátu. Vyhľadávacia množina je definovaná zoznamom znakov uzavretých v hranatých zátvorkách. Pred úvodnou zátvorkou je znak %. Pozrime sa na to na príklade.

#include

void main (void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Zadáme znakovú sadu:
12345abcdefg456

Na obrazovke program zobrazí:
12345
abcdefg456

Pri zadávaní vyhľadávacej množiny môžete na určenie medzier použiť aj znak spojovníka, ako aj maximálnu šírku vstupného poľa.

scanf("%10", str1);

Môžete tiež definovať znaky, ktoré sa nenachádzajú vo vyhľadávacej množine. Pred prvým z týchto znakov je znak ^. Znaková sada rozlišuje medzi malými a veľkými písmenami.

Pripomínam, že pri použití funkcie scanf () jej musíte odovzdať adresy premenných ako parametre. Vyššie uvedený kód bol napísaný:

charstr; // pole pre 80 znakov
scanf("%s",str);

Všimnite si, že pred str nie je znak &. Je to preto, že str je pole a názov poľa, str, je ukazovateľ na prvý prvok poľa. Znamienko & sa preto neuvádza. Adresu už odovzdávame funkcii scanf(). Jednoducho povedané, str je adresa v pamäti počítača, kde bude uložená hodnota prvého prvku poľa.

Príklady programov.

Príklad 1
Tento program zobrazí otázku „Koľko máš rokov?:“ a čaká na zadanie. Ak napríklad zadáte číslo 20, program zobrazí reťazec "Máte 20 rokov.". Keď sme zavolali funkciu scanf(), predponu premennej veku sme dali znakom &, pretože funkcia scanf() potrebuje adresy premenných. Funkcia scanf() zapíše zadanú hodnotu na zadanú adresu. V našom prípade sa zadaná hodnota 20 zapíše na adresu premennej veku.

/* Príklad 1 */

#include

void main (void)
{
int vek;

Printf("\nKoľko máš rokov?:");
scanf("%d",&vek);
printf("Máš %d rokov.", vek);
}

Príklad 2
Program kalkulačky. Táto kalkulačka dokáže sčítať iba čísla. Ak zadáte 100+34, program vráti výsledok: 100+34=134.

/* Príklad 2 */

#include

void main (void)
{
int x, y;

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

Príklad 3
Tento príklad ukazuje, ako nastaviť šírku čítacieho poľa. V našom príklade je šírka poľa päť znakov. Ak zadáte reťazec s viacerými znakmi, všetky znaky po 5. budú vyradené. Venujte pozornosť volaniu funkcie scanf(). Znak & nepredchádza názvu poľa, pretože názov poľa je adresou prvého prvku poľa.

/* Príklad 3 */

#include

void main (void)
{
charname;

Printf("\nZadajte svoje užívateľské meno (maximálne 5 znakov):");
scanf("%5s", meno);
printf("\nZadali ste %s", meno);
}

Príklad 4
Posledný príklad v tomto článku ukazuje, ako môžete použiť sadu vyhľadávania. Po spustení programu zadajte číslo od 2 do 5.

/* Príklad 4 */

#include

void main (void)
{
charbal;

Printf("Vaše skóre je 2,3,4,5:");
scanf("%", &bal);
printf("\nSkóre %c", bal);
}

Programovací jazyk C++

Posledná aktualizácia: 28.08.2017

Programovací jazyk C++ je univerzálny kompilovaný programovací jazyk na vysokej úrovni statické písanie, ktorý je vhodný na vytváranie širokej škály aplikácií. C++ je dnes jedným z najpopulárnejších a najrozšírenejších jazykov.

Má svoje korene v jazyku C, ktorý v rokoch 1969-1973 vyvinul v Bell Labs programátor Dennis Ritchie. Začiatkom 80. rokov dánsky programátor Bjarne Stroustrup, vtedy v Bell Labs, vyvinul C++ ako rozšírenie jazyka C. V skutočnosti na začiatku C++ jednoducho doplnil jazyk C o niektoré funkcie objektovo orientovaného programovania. A tak to sám Stroustrup najprv nazval „C s triedami“ („C s triedami“).

Následne nový jazyk začali získavať na popularite. Boli doň pridané nové funkcie, ktoré z neho urobili nielen doplnok k C, ale úplne nový programovací jazyk. V dôsledku toho bolo "C s triedami" premenované na C++. A odvtedy sa oba jazyky začali rozvíjať nezávisle od seba.

C++ je výkonný jazyk, ktorý zdedí bohaté pamäťové možnosti od jazyka C. Preto C++ často nachádza svoje uplatnenie v systémovom programovaní, najmä pri tvorbe operačné systémy, ovládače, rôzne utility, antivírusy atď. Mimochodom, Windows je väčšinou napísaný v C++. Ale iba aplikácia na programovanie systému daný jazyk nie je obmedzený. C++ je možné použiť v programoch akejkoľvek úrovne, kde je dôležitá rýchlosť a výkon. Často sa používa na tvorbu grafické aplikácie, rôzne aplikačné programy. Obzvlášť často sa používa na vytváranie hier s bohatým a bohatým vizuálom. Navyše v poslednom čase naberá na obrátkach aj mobilný smer, kde svoje uplatnenie našlo aj C ++. A dokonca aj pri vývoji webu môžete použiť C++ na vytváranie webových aplikácií alebo nejakých pomocných služieb, ktoré slúžia webovým aplikáciám. Vo všeobecnosti je C++ široko používaný jazyk, v ktorom môžete napísať takmer akýkoľvek druh programu.

C++ je kompilovaný jazyk, čo znamená, že kompilátor prekladá zdroj v C++ do spustiteľného súboru, ktorý obsahuje sadu strojových inštrukcií. Rôzne platformy však majú svoje vlastné charakteristiky, takže kompilované programy nemožno jednoducho preniesť z jednej platformy na druhú a spustiť tam. Na úrovni zdrojového kódu sú však programy v C++ väčšinou prenosné, pokiaľ sa nepoužívajú niektoré funkcie špecifické pre OS. A dostupnosť kompilátorov, knižníc a vývojových nástrojov pre takmer všetky bežné platformy umožňuje kompilovať rovnaký zdrojový kód C++ do aplikácií pre tieto platformy.

Na rozdiel od jazyka C vám jazyk C++ umožňuje písať aplikácie v objektovo orientovanom štýle, ktorý predstavuje program ako kolekciu tried a objektov, ktoré sa navzájom ovplyvňujú. To zjednodušuje vytváranie veľkých aplikácií.

Míľniky vývoja

V rokoch 1979-80 vyvinul Bjarne Stroustrup rozšírenie jazyka C – „C s triedami“. V roku 1983 bol jazyk premenovaný na C++.

V roku 1985 bola vydaná prvá komerčná verzia jazyka C++, ako aj prvé vydanie knihy „Programovací jazyk C++“, ktorá predstavovala prvý popis tohto jazyka pri absencii oficiálneho štandardu.

Vydané v roku 1989 novú verziu C++ 2.0, ktorý obsahoval množstvo nových funkcií. Potom sa jazyk až do roku 2011 vyvíjal pomerne pomaly. Ale zároveň, v roku 1998, bol urobený prvý pokus o štandardizáciu jazyka zo strany ISO (Medzinárodná organizácia pre normalizáciu). Prvý štandard sa nazýval ISO/IEC 14882:1998 alebo skrátene C++98. Neskôr v roku 2003 bola zverejnená nová verzia štandardu C++03.

V roku 2011 bol vydaný nový štandard C++11, ktorý obsahoval mnoho doplnkov a obohatil jazyk C++. Vysoké číslo nová funkčnosť. V roku 2014 nasledoval menší dodatok k štandardu, známy aj ako C++14. A ďalšie kľúčové vydanie jazyka je naplánované na rok 2017.

Kompilátory a vývojové prostredia

Na vývoj programov v C++ potrebujete kompilátor – ten preloží zdrojový kód C++ do spustiteľného súboru, ktorý je možné následne spustiť. Ale v súčasnosti existuje veľa rôznych kompilátorov. Môžu sa líšiť v rôznych aspektoch, najmä v implementácii noriem. Základný zoznam kompilátorov pre C++ nájdete na wikipédii. Pre vývoj sa odporúča vybrať tie kompilátory, ktoré vyvíjajú a implementujú všetky najnovšie štandardy. Napríklad v tomto návode sa bude prevažne používať voľne dostupný kompilátor g++ vyvinutý projektom GNU.

Na vytváranie programov môžete použiť aj IDE ako Visual Studio, Netbeans, Eclipse, Qt atď.

Naučiť sa základy a jemnosti programovacieho jazyka C++. Učebnica s praktickými úlohami a testami. Chcete sa naučiť programovať? Potom ste na správnom mieste – tu bezplatné vzdelanie programovanie. Či už máte skúsenosti alebo nie, tieto lekcie programovania vám pomôžu začať vytvárať, kompilovať a ladiť programy C++ v rôznych vývojových prostrediach: Visual Studio, Code::Blocks, Xcode alebo Eclipse.

Veľa príkladov a podrobných vysvetlení. Ideálne pre začiatočníkov (figuríny) aj pokročilejších. Všetko je vysvetlené od začiatku do najmenších detailov. Tieto lekcie (200+) vám poskytnú dobrý základ / základy pre pochopenie programovania nielen v C++, ale aj v iných programovacích jazykoch. A je to úplne zadarmo!

Tiež zvážené tvorba krok za krokom c++ hry, grafickej knižnice SFML a viac ako 50 úloh na otestovanie vašich schopností a vedomostí v C++. Bonusom navyše je .

Za repost +20 ku karme a moju vďačnosť!

Kapitola číslo 0. Úvod. Začiatok práce

Kapitola číslo 1. Základy C++

Kapitola číslo 2. Premenné a základné dátové typy v C++

Kapitola číslo 3. Operátori v C++

Kapitola číslo 4. Rozsah a iné typy premenných v C++

Kapitola číslo 5. Poradie, v ktorom sa kód vykonáva v programe. Slučky, vetvy v C++

Tieto návody sú pre každého, či už s programovaním začínate, alebo už máte bohaté skúsenosti s programovaním v iných jazykoch! Tento materiál je pre tých, ktorí sa chcú naučiť jazyky C/C++ od úplných základov až po tie najzložitejšie štruktúry.

C++ je programovací jazyk, znalosť tohto programovacieho jazyka vám umožní ovládať počítač na najvyššej úrovni. V ideálnom prípade môžete počítač nechať robiť, čo chcete. Naša stránka vám pomôže naučiť sa programovací jazyk C++.

Inštalácia /IDE

Úplne prvá vec, ktorú by ste mali urobiť predtým, ako sa začnete učiť C++, je uistiť sa, že máte IDE – integrované vývojové prostredie (program, v ktorom budete programovať). Ak nemáte IDE, potom ste tu. Keď sa rozhodnete pre IDE, nainštalujte si ho a precvičte si vytváranie jednoduchých projektov.

Úvod do C++

Jazyk C++ je súbor príkazov, ktoré informujú počítač, čo má robiť. Táto sada príkazov sa zvyčajne nazýva zdrojový kód alebo len kód. Príkazy sú buď „funkcie“ alebo „ Kľúčové slová". Kľúčové slová (vyhradené slová C/C++) sú základnými stavebnými kameňmi jazyka. Funkcie sú zložité stavebné kamene, pretože sú napísané z hľadiska jednoduchších funkcií, ako uvidíte v našom úplne prvom programe nižšie. Táto štruktúra funkcií pripomína obsah knihy. Obsah môže zobrazovať kapitoly knihy, každá kapitola v knihe môže mať svoj vlastný obsah pozostávajúci z odsekov, každý odsek môže mať svoje vlastné pododstavce. Aj keď C++ poskytuje veľa bežné funkcie a vyhradené slová, ktoré môžete použiť, je stále potrebné písať vlastné funkcie.

V ktorej časti programu ste začínali? Každý program v C++ má jednu funkciu, nazýva sa hlavná alebo hlavná funkcia, vykonávanie programu začína touto funkciou. Od hlavná funkcia, môžete tiež volať akékoľvek iné funkcie, či už sú nami napísané alebo, ako už bolo spomenuté, poskytnuté kompilátorom.

Ako teda získate prístup k týmto štandardným funkciám? Pristúpiť štandardné funkcie ktoré prichádzajú s kompilátorom, musíte zahrnúť hlavičkový súbor pomocou direktívy preprocesora — #include . Prečo je účinný? Pozrime sa na príklad pracovný program:

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

Pozrime sa bližšie na prvky programu. #include je direktíva "preprocessor", ktorá hovorí kompilátoru, aby vložil kód zo súboru hlavičky iostream do nášho programu pred vytvorením spustiteľného súboru. Zahrnutím súboru hlavičky do programu získate prístup k mnohým rôznym funkciám, ktoré môžete vo svojom programe použiť. Napríklad príkaz cout vyžaduje iostream . Riadok používajúci menný priestor std; hovorí kompilátoru, aby použil skupinu funkcií, ktoré sú súčasťou štandardnej knižnice std. Tento riadok tiež umožňuje programu používať operátory ako cout . Bodkočiarka je súčasťou syntaxe C++. Oznamuje kompilátoru, že toto je koniec príkazu. O niečo neskôr uvidíte, že bodkočiarka sa používa na ukončenie väčšiny príkazov v C++.

Ďalším dôležitým riadkom programu je int main() . Tento riadok informuje kompilátor, že existuje funkcia s názvom main a že funkcia vracia celé číslo typu int. Zložené zátvorky ( a ) signalizujú začiatok ( a koniec ) funkcie. Zložené zátvorky sa používajú aj v iných blokoch kódu, ale vždy znamenajú to isté - začiatok a koniec bloku.

V C++ sa objekt cout používa na zobrazenie textu (vyslovuje sa „cout“). Používa znaky<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Ďalším príkazom je cin.get() . Toto je ďalšie volanie funkcie, ktoré načítava dáta zo vstupného dátového toku a čaká na stlačenie klávesu ENTER. Tento príkaz zabráni zatvoreniu okna konzoly, kým nestlačíte kláves ENTER. To vám dáva čas pozrieť sa na výstup programu.

Po dosiahnutí konca hlavnej funkcie (uzavieracia zložená zátvorka) náš program vráti hodnotu 0 pre operačný systém. Táto návratová hodnota je dôležitá, pretože jej analýzou môže OS posúdiť, či náš program úspešne skončil alebo nie. Návratová hodnota 0 znamená úspech a vráti sa automaticky (ale len pre typ údajov int, ostatné funkcie vyžadujú, aby ste hodnotu vrátili manuálne), ale ak by sme chceli vrátiť niečo iné, napríklad 1, museli by sme to urobiť ručne .

#include pomocou menného priestoru std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Ak chcete materiál konsolidovať, zadajte kód programu do svojho IDE a spustite ho. Po spustení programu a zobrazení výstupu trochu experimentujte s príkazom cout. To vám pomôže zvyknúť si na jazyk.

Nezabudnite komentovať svoje programy!

Pridajte do kódu komentáre, aby bol prehľadnejší nielen pre vás, ale aj pre ostatných. Kompilátor ignoruje komentáre pri vykonávaní kódu, čo umožňuje použiť ľubovoľný počet komentárov na popis skutočného kódu. Na vytvorenie komentára použite buď // , ktorý povie kompilátoru, že zvyšok riadku je komentár, alebo /*, za ktorým nasleduje */ . Keď sa učíte programovať, je užitočné mať možnosť komentovať určité časti kódu, aby ste videli, ako sa zmení výsledok programu. O technike komentovania si môžete prečítať podrobne.

Čo robiť so všetkými týmito typmi premenných?

Niekedy môže byť mätúce mať viacero typov premenných, keď sa zdá, že niektoré typy premenných sú nadbytočné. Je veľmi dôležité použiť správny typ premennej, pretože niektoré premenné vyžadujú viac pamäte ako iné. Tiež kvôli spôsobu, akým sú čísla s pohyblivou rádovou čiarkou uložené v pamäti, sú dátové typy float a double „nepresné“ a nemali by sa používať, keď sa musí uložiť presná celočíselná hodnota.

Deklarovanie premenných v C++

Ak chcete deklarovať premennú, použite typ syntaxe<имя>; . Tu je niekoľko príkladov deklarácií premenných:

int num; charakter; float num_float;

Je povolené deklarovať niekoľko premenných rovnakého typu v jednom riadku, preto musí byť každá z nich oddelená čiarkou.

int x, y, z, d;

Ak ste sa pozorne pozreli, možno ste videli, že za deklaráciou premennej vždy nasleduje bodkočiarka. Môžete si prečítať viac o konvencii - "o pomenovaní premenných".

Bežné chyby pri deklarovaní premenných v C++

Ak sa pokúsite použiť premennú, ktorá nie je deklarovaná, váš program sa nezkompiluje a zobrazí sa chyba. V C++ všetky kľúčové slová jazyka, všetky funkcie a všetky premenné rozlišujú veľké a malé písmená.

Používanie premenných

Takže teraz viete, ako deklarovať premennú. Tu je príklad programu demonštrujúci použitie premennej:

#include pomocou menného priestoru std; int main() ( int cislo; cout<< "Введите число: "; cin >>číslo; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Poďme sa pozrieť na tento program a študovať jeho kód, riadok po riadku. Kľúčové slovo int hovorí, že číslo je celé číslo. Funkcia cin >> načíta hodnotu v čísle , užívateľ musí po zadanom čísle stlačiť enter. cin.ignore() je funkcia, ktorá číta znak a ignoruje ho. Náš vstup sme usporiadali do programu, po zadaní čísla stlačíme kláves ENTER, znak, ktorý sa tiež odovzdá vstupnému toku. Nepotrebujeme to, tak to zahodíme. Majte na pamäti, že premenná bola deklarovaná ako typ integer, ak sa používateľ pokúsi zadať desiatkové číslo, bude skrátené (t. j. desiatková časť čísla bude ignorovaná). Skúste zadať desatinné číslo alebo postupnosť znakov pri spustení vzorového programu, odpoveď bude závisieť od vstupnej hodnoty.

Upozorňujeme, že pri tlači z premennej sa nepoužívajú úvodzovky. Absencia úvodzoviek hovorí kompilátoru, že existuje premenná, a preto musí program skontrolovať hodnotu premennej, aby pri spustení nahradil názov premennej jej hodnotou. Operátory s viacerými zmenami na tej istej linke sú úplne prijateľné a výstup sa vykoná v rovnakom poradí. Musíte oddeliť reťazcové literály (reťazce v úvodzovkách) a premenné, pričom každej z nich poskytnete iný operátor posunu<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Meniť a porovnávať hodnoty

Samozrejme, bez ohľadu na to, aký typ údajov používate, premenné sú málo zaujímavé, pokiaľ ich hodnotu nemožno zmeniť. Nižšie sú uvedené niektoré operátory používané v spojení s premennými:

  • * násobenie,
  • - odčítanie,
  • + prídavok,
  • / divízia,
  • = úloha,
  • == rovnosť,
  • > viac
  • < меньше.
  • != nerovná sa
  • >= väčšie alebo rovné
  • <= меньше или равно

Operátory, ktoré vykonávajú matematické funkcie, musia byť použité napravo od priraďovacieho znaku, aby bolo možné priradiť výsledok k premennej vľavo.

Tu je niekoľko príkladov:

A = 4*6; // použi riadkový komentár a bodkočiarku, a je 24 a = a + 5; // rovná sa súčtu pôvodnej hodnoty a piatich a == 5 // nepriradených päť, kontrola a rovná sa 5 alebo nie

== budete často používať v konštrukciách, ako sú podmienené príkazy a cykly.

A< 5 // Проверка, a менее пяти? a >5 // Skontrolujte, či a je väčšie ako päť? a == 5 // Skontrolujte, či a je päť? a != 5 // Skontrolujte, či sa a nerovná päť? a >= 5 // Skontrolujte, či a je väčšie alebo rovné päť? a<= 5 // Проверка, a меньше или равно пяти?

Tieto príklady neukazujú použitie porovnávacích znakov veľmi jasne, ale keď začneme študovať výberové operátory, pochopíte, prečo je to potrebné.



Načítava...
Hore