Funkce Scanf C: popis. §1 Obecné informace o jazyce

1. Úvod

Programování vyžaduje nové univerzální algoritmické modely a hardware implementuje algoritmy nejen v jiné podobě, ale také na základě jiného algoritmického modelu - automatů. Půjčování technologií z vývoje hardwaru je klíčovou myšlenkou programování automatů. Syntéza digitálního zařízení se však od programování liší. Ale při zapůjčení modelu na jedné straně není radno jej výrazně měnit a na druhé straně nelze ignorovat již existující teorii a praxi programování.

Dále se podíváme na technologii SWITCH pro navrhování automatových programů, ve kterých se s podobnými procesy setkáváte neustále. Na jedné straně to změnilo model konečného stroje natolik, že to vlastně přesáhlo rámec teorie automatů. A na druhé straně zavádí do programování pojmy, které jsou pro programátory obtížně pochopitelné a někdy jsou prostě nadbytečné, protože existují známější analogie z teorie programů a programátorské praxe.

Jako základ pro diskusi o problémech automatického programování si vezmeme nedávnou přednášku Shalyto A.A. a jeho „programovací“ články k definici paradigmatu automatického programování.

Programovací jazyk C++

Poslední aktualizace: 28.08.2017

Programovací jazyk C++ je kompilovaný programovací jazyk na vysoké úrovni obecný účel staticky typované, což je vhodné pro vytváření široké škály aplikací. C++ je dnes jedním z nejpopulárnějších a nejrozšířenějších jazyků.

Má své kořeny v jazyce C, který byl vyvinut v letech 1969-1973 v Bell Labs programátorem Dennisem Ritchiem. Na začátku 80. let dánský programátor Bjarne Stroustrup, tehdy pracující v Bell Labs, vyvinul C++ jako rozšíření jazyka C. Ve skutečnosti na začátku C++ jednoduše doplnil jazyk C o některé možnosti objektově orientovaného programování. A proto to sám Stroustrup zpočátku nazval „C s třídami“.

Následně nový jazyk začal získávat na popularitě. Byly do něj přidány nové funkce, které z něj udělaly nejen doplněk k C, ale zcela nový programovací jazyk. V důsledku toho bylo „C s třídami“ přejmenováno na C++. A od té doby se oba jazyky začaly vyvíjet nezávisle na sobě.

C++ je výkonný jazyk, který zdědí bohaté paměťové schopnosti od jazyka C. Proto C++ často nachází uplatnění v programování systému, zejména při vytváření operačních systémů, ovladačů, různých utilit, antivirů atd. Mimochodem, OS Windows je většinou napsán v C++. Ale pouze aplikace pro systémové programování tohoto jazyka neomezená. C++ lze použít v programech jakékoli úrovně, kde je důležitá rychlost a výkon. Často se používá k vytvoření grafické aplikace, různé aplikační programy. Zvláště často se také používá k vytváření her s bohatou a bohatou vizualizací. V poslední době navíc nabírá na síle mobilní směr, kde své uplatnění našlo i C++. A dokonce i ve vývoji webu můžete také použít C++ k vytváření webových aplikací nebo některých podpůrných služeb, které slouží webovým aplikacím. Obecně je C++ široce používaný jazyk, ve kterém můžete vytvořit téměř jakýkoli typ programu.

C++ je kompilovaný jazyk, což znamená, že překladač překládá zdroj v C++ spustitelný soubor, který obsahuje sadu strojových instrukcí. Ale různé platformy mají své vlastní charakteristiky, takže zkompilované programy nelze jednoduše přenést z jedné platformy na druhou a tam běžet. Na úrovni zdrojového kódu jsou však programy C++ z velké části přenosné, pokud nejsou použity některé funkce specifické pro OS. A dostupnost kompilátorů, knihoven a vývojových nástrojů pro téměř všechny běžné platformy umožňuje kompilovat stejný zdrojový kód C++ do aplikací pro tyto platformy.

Na rozdíl od C vám jazyk C++ umožňuje psát aplikace v objektově orientovaném stylu, který představuje program jako kolekci tříd a objektů, které se vzájemně ovlivňují. Což zjednodušuje tvorbu velkých aplikací.

Hlavní fáze vývoje

V letech 1979-80 vyvinul Bjarne Stroustrup rozšíření jazyka C – „C with Classes“. V roce 1983 byl jazyk přejmenován na C++.

V roce 1985 byla vydána první komerční verze jazyka C++ a také první vydání knihy „Programovací jazyk C++“, která představovala první popis tohoto jazyka při absenci oficiálního standardu.

Vyšlo v roce 1989 novou verzi Jazyk C++ 2.0, který obsahoval řadu nových funkcí. Poté se jazyk vyvíjel poměrně pomalu až do roku 2011. Ale zároveň v roce 1998 byl učiněn první pokus o standardizaci jazyka organizací ISO (International Organization for Standardization). První norma se jmenovala ISO/IEC 14882:1998, nebo zkráceně C++98. Následně v roce 2003 byla zveřejněna nová verze standardu C++03.

V roce 2011 byla zveřejněna nový standard C++11, který obsahoval mnoho doplňků a obohatil jazyk C++ o velké množství nových funkcí. V návaznosti na to byl v roce 2014 vydán malý doplněk standardu, známý také jako C++14. A další klíčové vydání jazyka je naplánováno na rok 2017.

Kompilátory a vývojová prostředí

K vývoji programů v C++ potřebujete kompilátor – ten přeloží zdrojový kód v C++ do spustitelného souboru, který pak můžete spustit. Ale v současné době existuje mnoho různých kompilátorů. Mohou se lišit v různých aspektech, zejména v implementaci norem. Základní seznam kompilátorů pro C++ lze nalézt na Wikipedii. Pro vývoj se doporučuje vybrat ty kompilátory, které vyvíjejí a implementují všechny nejnovější standardy. V tomto tutoriálu tedy budeme primárně používat volně dostupný kompilátor g++ vyvinutý projektem GNU.

K vytváření programů můžete také použít IDE jako Visual Studio, Netbeans, Eclipse, Qt atd.

Naučit se základy a složitosti programovacího jazyka C++. Učebnice s praktickými úkoly a testy. Chcete se naučit programovat? Pak jste na správném místě – zde je bezplatné školení programování. Ať už máte nebo nemáte zkušenosti, tyto lekce programování vám pomohou začít vytvářet, kompilovat a ladit programy C++ v různých vývojových prostředích: Visual Studio, Code::Blocks, Xcode nebo Eclipse.

Mnoho příkladů a podrobných vysvětlení. Ideální jak pro začátečníky (figuríny), tak pro pokročilejší. Vše je vysvětleno od základů až do detailů. Tyto lekce (200+) vám poskytnou dobrý základ/základ pro pochopení programování nejen v C++, ale i v jiných programovacích jazycích. A je to zcela zdarma!

Také uvažováno tvoření krok za krokem hry v C++, grafickou knihovnu SFML a více než 50 úkolů, které otestují vaše dovednosti a znalosti v C++. Dalším bonusem je.

Za opětovné odeslání +20 ke karmě a můj dík!

Kapitola č. 0. Úvod. Začátek práce

Kapitola č. 1. Základy C++

Kapitola č. 2. Proměnné a základní datové typy v C++

Kapitola č. 3. Operátoři v C++

Kapitola č. 4. Rozsah a další typy proměnných v C++

Kapitola č. 5. Pořadí, ve kterém je kód vykonáván v programu. Smyčky a větve v C++

Počítače jsou snad nejvšestrannějšími nástroji, kterými lidstvo disponuje. Jsou schopny provádět neuvěřitelné výpočty, umožňují ukládat obrovské množství informací, úplně jiné části planety a zároveň je snadno vyměňovat bez ohledu na umístění. Počítače usnadňují mnoho každodenních úkolů a umožňují automatizovat mnoho rutinních procesů, které by pro člověka byly velmi zdlouhavé a nudné. Je tolik věcí, které počítače dokážou, ale přesto počítače nemají inteligenci, na rozdíl od lidí. Chcete-li zautomatizovat i ten nejjednodušší proces, musíte počítači jasně a jednoznačně sdělit, co přesně má dělat. Bohužel náš jazyk a počítačový jazyk jsou zcela odlišné. Mezi strojem a člověkem je tedy vážná jazyková bariéra, kterou je třeba nějak překonat, jinak nám počítač nebude rozumět. A dokud nám počítače nebudou rozumět, neudělají nic samy. Jako prostředek komunikace mezi člověkem a počítačem bylo vynalezeno velké množství programovacích jazyků. Pomocí programovacích jazyků vytváříme programy a počítač s programy přímo pracuje. Samotné programy jsou sady instrukcí, které počítač dokáže pochopit a provést.

Typy programů

Abychom mohli efektivně komunikovat s počítačem, což je to, co chceme, existuje celá řada programovacích jazyků.

V závislosti na typu projektu existuje mnoho faktorů, které je třeba vzít v úvahu při výběru programovacího jazyka. Zde je seznam nejvýznamnějších faktorů:

Kompilace, interpretace a JIT kompilace

Proces kompilace překládá kód napsaný v programovacím jazyce do nativního jazyka cílového stroje. Program, který tento proces provádí, se nazývá kompilátor. Kompilace může kód spustit poměrně rychle, zvláště pokud je kompilátor efektivní při optimalizaci. Faktem ale je, že výsledný kód nemůže fungovat jinak operační systémy a proces kompilace nějakou dobu trvá a čím více kódu, tím delší je proces kompilace. Stojí za zmínku, že při provádění jakýchkoli změn v kódu programu je nutné jej zkompilovat a teprve poté spustit.

Interpretované programovací jazyky jsou čteny programem zvaným interpret a spouštěny stejným programem. Interpretované programovací jazyky mohou běžet na různých operačních systémech, stejně jako interpret, a nemají ani dlouhé kompilační časy. Ale programy napsané pomocí interpretovaných jazyků mají tendenci běžet mnohem pomaleji než ekvivalentní kompilované programy.

A nakonec tzv. on-the-fly kompilace (neboli JIT kompilace). Takové jazyky jsou rychle zkompilovány v době spuštění programu. Programy napsané v jazycích JIT zpravidla nejsou optimalizovány, čímž se urychluje proces kompilace a obnovuje se rovnováha mezi výkonem a kompatibilitou napříč platformami.

Vysoká nebo nízká úroveň programování

Nízkoúrovňové jazyky většinou pracují přímo s hardwarem, a jsou proto nejvhodnější pro zápis ovladačů zařízení. Ovladače jsou programy, které řídí hardware a mají k němu přímý přístup. Program napsaný v nízkoúrovňovém jazyce je však obvykle obtížné přenést na jiné platformy. A proto je pro každý OS stejné zařízení dodáváno s různými ovladači. Nízkoúrovňové programovací jazyky se téměř vždy kompilují.

V jazycích vysoká úroveň důraz je kladen na koncept jazyka. To znamená, že takový programovací jazyk by měl být snadno srozumitelný, například reprezentovat data jako pole, řetězce, objekty atd. Jazyk na vysoké úrovni je obvykle srozumitelnější než jazyk na nízké úrovni. A zpravidla je vývoj programu v jazyce vysoké úrovně mnohem jednodušší a rychlejší než v jazyce nízké úrovně. Jak můžete vidět, různé úrovně programovací programy jsou určeny pro zcela odlišné úkoly a nemá smysl porovnávat funkčnost jazyků na různých úrovních, je to zbytečné.

Systémy datových typů programovacího jazyka

Pro každý programovací jazyk existuje specifikace, která definuje různá pravidla, která musí programovací jazyky dodržovat. Některé jazyky nemají datové typy, takže se jich to netýká. Většina jazyků (včetně C++) má datové typy, takže tyto informace se vám budou hodit.

Silný nebo slabý systém datových typů

Slabý vstupní systém neklade žádná omezení, programátor to musí sledovat. Když říkám „slabý datový systém“, myslím tím, že jazyk s takovým datovým systémem striktně nereguluje dostupné přetypování datových typů. Pokud například předáte do funkce násobení řetězec nebo symbol místo čísla, programovací jazyky bez striktního typu takový kód vykonají, ačkoli výsledek násobení ztrácí veškerý význam, protože řetězec nelze vynásobit číslo. Navíc výsledek provedení tohoto nesmyslného násobení bude nepředvídatelný. Pokud je programovací jazyk striktně napsán, pak ve fázi kompilace překladatel ohlásí chybu a zastaví proces vytváření projektu. Například,

// ukázkový program v C++ #include pomocí jmenného prostoru std; int main())( char string = "příklad"; int číslo = 5; cout<< string * number << endl; // умножаем строку на число }

V důsledku toho kompilátor ohlásí chybu:

chyba: neplatné operandy typů „char“ a „int“ k binárnímu „operátoru*“

Pokusíme se o totéž v nesilně typovaném programovacím jazyce – php. Upozorňujeme, že ani při deklaraci proměnných nemusíte uvádět datový typ.

Výsledek provedení tohoto kódu bude nula. Nedojde k žádné chybě, i když by se zdálo, že nemůžete násobit řetězec číslem. Ale v PHP je možné všechno. Kompilátor jazyka PHP nehlásí chybu, skript bude fungovat a dokonce vyprodukuje výsledek, a pokud se náš program skládá z 1000 řádků kódu, pak tuto chybu budeme těžko hledat. Toto je názorný příklad programovacího jazyka se „slabým systémem datových typů“, to znamená, že prevence takových absurdních operací spočívá zcela na bedrech programátora.

Definovaný nebo nedefinovaný datový typ

To platí pro kompilované i interpretované jazyky. Mnoho jazyků vyžaduje explicitní definici typu proměnných, takže neexistuje žádná nejistota, kompilátor a interpret jasně vědí, co mají dělat. Některé programovací jazyky nevyžadují explicitní definici typu proměnných. Datový typ je určen automaticky na základě obsahu proměnné.

Statický nebo dynamický datový typ

Pokud je jazyk staticky typován, pak kompilátor/interpret provede kontrolu typu jednou před procesem kompilace/interpretace. Pokud je datový typ dynamický, jsou datové typy kontrolovány za běhu.

Bezpečný nebo nebezpečný systém datových typů

Mohou nastat situace, které mohou vést k neočekávaným výsledkům nebo chybám. Bezpečný jazyk zavede co nejvíce omezení, aby k takovým situacím nedocházelo. Zatímco nebezpečný jazyk klade veškerou odpovědnost na programátora.

Tyto faktory mohou charakterizovat jeden nebo několik programovacích jazyků.

Podporovaná programovací paradigmata

Programovací paradigmata jsou metodologie nebo způsoby programování, které programovací jazyk podporuje. Zde je seznam hlavních paradigmat:

Deklarativní paradigma

Deklarativní programovací jazyk bude klást větší důraz na cíl spíše než na prostředky k dosažení tohoto cíle. Stačí uvést, čeho je třeba dosáhnout, ale není nutné uvádět, jaké prostředky použít. Toto paradigma zabraňuje nežádoucím vedlejším efektům, které mohou nastat při psaní vlastního kódu.

Funkční paradigma

Funkcionální programování je podmnožinou deklarativního programování, které se pokouší řešit problémy z hlediska matematických rovnic a funkcí. Funkční programování zachází s proměnnými a objekty jako s daty, která nejsou sdílena, na rozdíl od imperativních jazyků.

Generalizované paradigma

Generické programování se zaměřuje na psaní algoritmů z hlediska datových typů, které mají být definovány. To znamená, že stejný algoritmus může pracovat s různými typy dat. Tento přístup může být velmi mocným nástrojem, ale pouze pokud je dobře implementován.

Imperativní paradigma

Imperativní jazyky umožňují programátorům poskytnout počítači uspořádaný seznam instrukcí, které jsou potřeba k dokončení úkolu. Imperativní programovací jazyky jsou v kontrastu s deklarativními programovacími jazyky.

Strukturální paradigma

Strukturální programovací jazyky mají za cíl poskytnout určitou formu kódu – hierarchickou strukturu. Když je struktura kódu jasně viditelná, pořadí, ve kterém jsou příkazy prováděny, je intuitivně jasné. Takové jazyky obvykle odrazují od „skákání“ z jedné části kódu do druhé, například operátor goto, který všichni známe, který je definován v jazycích C a C++.

Procesní paradigma

Procedurální programovací jazyk označuje strukturované programovací jazyky, které podporují koncept procedury nebo podprogramu.

Objektově orientované paradigma

Objektově orientované programování (někdy zkráceně OOP) je podmnožinou strukturovaného programování, které vyjadřuje programy pomocí „objektů“. Toto paradigma umožňuje opětovné použití kódu a tento přístup je docela snadno pochopitelný.

Standardizace

Mají jazyky oficiální standard? Standardizace je velmi důležitá pro zajištění bezkonfliktního porozumění programu různými kompilátory/interprety. Některé jazyky jsou standardizovány American National Standards Institute (ANSI), jiné jsou standardizovány Mezinárodní organizací pro standardizaci (ISO). Všechny programovací jazyky musí být standardizovány, jinak nedojde k dohodě o tom, co je v syntaxi správné a nesprávné.

Pojďme si charakterizovat programovací jazyk C++

Nyní, když jsme prozkoumali hlavní charakteristiky programovacích jazyků, pojďme určit, které faktory programovací jazyk C++ splňuje.

C++ je standardizovaný programovací jazyk ISO.

Po nějakou dobu neměl C++ oficiální standard, nicméně od roku 1998 je C++ standardizován komisí ISO.

kompilovaný jazyk C++.

C++ se kompiluje přímo do strojového kódu, což z něj dělá jeden z nejrychlejších jazyků na světě.

C++ je silně typovaný jazyk.

C++ předpokládá, že programátor ví, co dělá, a umožňuje neuvěřitelné množství možností, omezených pouze představivostí.

C++ podporuje statické a dynamické datové typy.

Kontrolu datového typu lze tedy provádět v době kompilace nebo za běhu. A to opět dokazuje flexibilitu C++.

C++ podporuje mnoho paradigmat.

C++ podporuje procedurální, generická a objektově orientovaná programovací paradigmata a mnoho dalších paradigmat.

C++ je přenosný programovací jazyk.

Jako jeden z nejčastěji používaných jazyků na světě a jako otevřený jazyk má C++ širokou škálu kompilátorů, které běží na různých platformách. Kód standardní knihovny C++ poběží na mnoha platformách.

C++ je plně kompatibilní s jazykem C

V C++ můžete používat knihovny C a budou fungovat správně.

Standardní knihovna C/C++ obsahuje řadu funkcí pro čtení a zápis do konzole (klávesnice a monitor). Tyto funkce čtou a zapisují data jako jednoduchý proud znaků.

Pojem stream, používaný v programování, úzce souvisí s běžným, každodenním chápáním tohoto slova. Vstupní proud lze přirovnat k potrubí, kterým voda (informace) vstupuje do bazénu (paměť počítače), a výstupní proud lze přirovnat k potrubí, kterým voda opouští bazén. Důležitou vlastností této roury je, že data se mohou v jednu chvíli pohybovat pouze jedním směrem. I když je pro vstup a výstup použito stejné potrubí, nemůže se to stát současně: pro přepnutí směru proudění je třeba jej zastavit, provést nějakou akci a teprve poté lze proud nasměrovat opačným směrem. Další vlastností potoka je, že téměř nikdy nevyschne. Někdy vyschne, ale toto období nemůže být dlouhé, pokud systém funguje normálně.

Standardní výstupní funkce printf()

Funkce printf() je standardní výstupní funkcí. Pomocí této funkce můžete na obrazovce monitoru zobrazit řetězec znaků, číslo, hodnotu proměnné...

Funkce printf() má prototyp ve stdio.h
int printf(char *řídící řetězec, ...);

Pokud bude úspěšná, funkce printf() vrátí počet vytištěných znaků.

Řídicí řádek obsahuje dva typy informací: znaky, které se přímo vytisknou na obrazovku, a specifikátory formátu, které určují způsob tisku argumentů.

Funkce printf() je formátovaná výstupní funkce. To znamená, že v parametrech funkce je nutné specifikovat formát dat, která budou na výstupu. Formát dat je určen specifikátory formátu. Specifikátor formátu začíná znakem % následovaným kódem formátu.

Specifikátory formátu:

%S symbol
%d celé desetinné číslo
%i celé desetinné číslo
%E desetinné číslo ve tvaru x.xx e+xx
%E desetinné číslo ve tvaru x.xx E+xx
%F
%F desetinné číslo s plovoucí desetinnou čárkou xx.xxxx
%G %f nebo %e, podle toho, co je kratší
%G %F nebo %E, podle toho, co je kratší
osmičkové číslo
%s znakový řetězec
%u desetinné číslo bez znaménka
%X hexadecimální číslo
%X hexadecimální číslo
%% symbol %
%p ukazatel
%n ukazatel

Kromě toho lze na příkazy formátování použít modifikátory l a h.

%ld tisknout dlouhé int
%hu razítko krátké nesignováno
%Lf dlouhé dvojité razítko

Ve specifikátoru formátu lze za symbolem % zadat přesnost (počet číslic za desetinnou čárkou). Přesnost je nastavena následovně: %.n<код формата>. kde n je počet číslic za desetinnou čárkou a<код формата>- jeden z výše uvedených kódů.

Pokud máme například proměnnou x=10.3563 typu float a chceme zobrazit její hodnotu s přesností na 3 desetinná místa, měli bychom napsat:

printf("Proměnná x = %.3f",x);

Výsledek:
Proměnná x = 10,356

Můžete také určit minimální šířku pole přiděleného pro tisk. Pokud je řádek nebo číslo větší než zadaná šířka pole, vytiskne se celý řádek nebo číslo.

Pokud například napíšete:

printf("%5d",20);

pak výsledek bude následující:
20

Upozorňujeme, že číslo 20 nebylo vytištěno od samého začátku řádku. Pokud chcete, aby nevyužité prostory pole byly vyplněny nulami, musíte před šířku pole umístit symbol 0.

Například:

printf("%05d",20);

Výsledek:
00020

Kromě specifikátorů formátu dat může řídicí řádek obsahovat řídicí znaky:

\b BS, dole
\F Nová stránka, změna stránky
\n Nový řádek, posun řádku
\r Návrat vozíku
\t Horizontální tabulka
\proti Vertikální záložka
\" Dvojitá citace
\" Apostrof
\\ Obrácené lomítko
\0 Znak null, bajt null
\A Signál
\N Osmičková konstanta
\xN Hexadecimální konstanta
\? Otazník

Nejčastěji budete používat znak \n. S tímto ovládacím znakem můžete přejít na nový řádek. Podívejte se na ukázkové programy a vše pochopíte.

Příklady programů.

/* Příklad 1 */
#zahrnout

void main (void)
{
int a, b, c; // Deklarace proměnných a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

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

/* Příklad 2 */
#zahrnout

void main (void)
{
plovoucí x,y,z;

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

Printf("Souřadnice objektu: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Výsledek programu:
Souřadnice objektu: x:10,50, y:130,67, z:54,00

/* Příklad 3 */
#zahrnout

void main()
{
int x;

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

Výsledek programu:
x=10

/* Příklad 4 */
#zahrnout

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

Výsledek programu:
"Text v uvozovkách"
Obsah kyslíku: 100%

/* Příklad 5 */
#zahrnout

void main (void)
{
int a;

A = 11; // 11 v desítkové soustavě se rovná b v šestnáctkové soustavě
printf("a-dec=%d, a-hex=%X",a,a);
}

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

/* Příklad 6 */
#zahrnout

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

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

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

Výsledek programu:
ABC

/* Příklad 7 */
#zahrnout

void main (void)
{
char *str="Můj řetězec.";

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

Výsledek programu:
Toto je Moje linie.

/* Příklad 8 */
#zahrnout

void main (void)
{
printf("Dobrý den!\n"); // Po vytištění dojde k přechodu na nový řádek - \n
printf("Jmenuji se Pavel."); // Toto bude vytištěno na novém řádku
}

Výsledek programu:
Ahoj!
Jmenuji se Pavel.

Standardní vstupní funkce scanf()

Funkce scanf() je formátovaná vstupní funkce. S jeho pomocí můžete zadávat data ze standardního vstupního zařízení (klávesnice). Vstupními daty mohou být celá čísla, čísla s plovoucí desetinnou čárkou, znaky, řetězce a ukazatele.

Funkce scanf() má ve stdio.h následující prototyp:
int scanf(char *řídící řetězec);

Funkce vrací počet proměnných, kterým byla přiřazena hodnota.

Řídicí řetězec obsahuje tři typy znaků: specifikátory formátu, mezery a další znaky. Specifikátory formátu začínají znakem %.

Specifikátory formátu:

Při zadávání řetězce pomocí funkce scanf() (specifikátor formátu %s) se řetězec zadává před první mezeru!! těch. pokud zadáte řetězec "Ahoj světe!" pomocí funkce scanf().


scanf("%s",str);

pak po zadání výsledného řetězce, který bude uložen v poli str, se bude skládat z jednoho slova „Ahoj“. FUNKCE VSTUPUJE DO ŘETĚZCE PŘED PRVNÍM PROSTOREM! Pokud chcete zadávat řetězce s mezerami, použijte funkci

char *gets(char *buf);

Pomocí funkce gets() můžete zadat celé řetězce. Funkce get() čte znaky z klávesnice, dokud se neobjeví znak nového řádku (\n). Samotný znak nového řádku se objeví, když stisknete enter. Funkce vrací ukazatel na buf. buf - buffer (paměť) pro vstupní řetězec.

Ačkoli get() není tématem tohoto článku, pojďme napsat příklad programu, který vám umožní zadat celý řádek z klávesnice a zobrazit jej na obrazovce.

#zahrnout

void main (void)
{
char buffer; // pole (buffer) pro vstupní řetězec

Gets(buffer); // zadejte řádek a stiskněte enter
printf("%s",buffer); // výstup zadaného řetězce na obrazovku
}

Ještě jedna důležitá poznámka! Chcete-li zadat data pomocí funkce scanf(), potřebuje jako parametry předat adresy proměnných, nikoli samotné proměnné. Chcete-li získat adresu proměnné, musíte před název proměnné uvést znak & (ampersand). Znak & znamená převzetí adresy.

Co znamená adresa? Pokusím se vysvětlit. V programu máme proměnnou. Proměnná ukládá svou hodnotu do paměti počítače. Toto je adresa, kterou získáme pomocí & je adresa v paměti počítače, kde je uložena hodnota proměnné.

Podívejme se na příklad programu, který nám ukazuje, jak používat &

#zahrnout

void main (void)
{
int x;

Printf("Zadejte proměnnou x:");
scanf("%d",&x);
printf("Proměnná x=%d",x);
}

Nyní se vraťme na řídicí řádek funkce scanf(). Znovu:

int scanf(char *řídící řetězec);

Znak mezery v řídicím řetězci přikazuje ve vstupním proudu přeskočit jednu nebo více mezer. Kromě mezery lze vnímat znak tabulátoru nebo nového řádku. Nenulový znak znamená, že znak je přečten a zahozen.

Oddělovače mezi dvěma zadanými čísly jsou mezera, tabulátor nebo nový řádek. Znak * za % a před kódem formátu (specifikátor formátu) přikazuje, aby byl datový typ načten, ale není přiřazen k této hodnotě.

Například:

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

zadání 50+20 nastaví proměnnou i na 50, proměnnou j na 20 a znak + se přečte a ignoruje.

Příkaz format může určit největší šířku pole, které se má číst.

Například:

scanf("%5s",str);

označuje potřebu přečíst prvních 5 znaků ze vstupního toku. Pokud zadáte 1234567890ABC, pole str bude obsahovat pouze 12345, zbývající znaky budou ignorovány. Oddělovače: mezera, tabulátor a nový řádek – při zadávání symbolu se s nimi zachází jako se všemi ostatními znaky.

Pokud se v řídicím řetězci vyskytují nějaké další znaky, jsou určeny k identifikaci a přeskočení odpovídajícího znaku. Operátor streamu znaků 10plus20

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

přiřadí hodnotu 10 proměnné x, hodnotu 20 proměnné y a přeskočí znaky plus, protože se vyskytují v řídicím řetězci.

Jednou z výkonných funkcí funkce scanf() je její schopnost specifikovat sadu skenů. Vyhledávací množina definuje množinu znaků, se kterými budou porovnávány znaky načtené funkcí scanf(). Funkce scanf() čte znaky tak dlouho, dokud se vyskytují ve vyhledávací sadě. Jakmile zadaný znak není ve vyhledávací sadě nalezen, funkce scanf() se přesune k dalšímu specifikátoru formátu. Vyhledávací sada je definována seznamem znaků uzavřených v hranatých závorkách. Znak % se umístí před otevírací závorku. Podívejme se na to na příkladu.

#zahrnout

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

Program zobrazí na obrazovce:
12345
abcdefg456

Při zadávání vyhledávací sady můžete také použít znak pomlčky k určení mezery a také maximální šířky vstupního pole.

scanf("%10", str1);

Můžete také definovat znaky, které nejsou obsaženy ve vyhledávací sadě. Před prvním z těchto znaků je znak ^. Mnoho znaků rozlišuje mezi malými a velkými písmeny.

Připomínám, že když používáte funkci scanf(), musíte jí jako parametry předat proměnné adresy. Výše uvedený kód byl napsán:

char str; // pole 80 znaků
scanf("%s",str);

Všimněte si, že str nepředchází znak &. To se děje, protože str je pole a název pole - str je ukazatel na první prvek pole. Znak & by se proto neměl používat. Adresu již předáváme funkci scanf(). Jednoduše řečeno, str je adresa v paměti počítače, kde bude uložena hodnota prvního prvku pole.

Příklady programů.

Příklad 1
Tento program zobrazí dotaz "Kolik je vám let?:" a čeká na zadání dat. Pokud například zadáte číslo 20, program zobrazí řádek „Je vám 20 let.“. Při volání funkce scanf() vložíme před proměnnou stáří znak &, protože funkce scanf() potřebuje adresy proměnných. Funkce scanf() zapíše zadanou hodnotu na zadanou adresu. V našem případě se zadaná hodnota 20 zapíše na adresu proměnné věk.

/* Příklad 1 */

#zahrnout

void main (void)
{
int věk;

Printf("\nKolik je ti let?:");
scanf("%d",&age);
printf("Je ti %d let.", věk);
}

Příklad 2
Program kalkulačky. Tato kalkulačka umí pouze sčítat čísla. Když zadáte 100+34, program vytvoří výsledek: 100+34=134.

/* Příklad 2 */

#zahrnout

void main (void)
{
int x, y;

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

Příklad 3
Tento příklad ukazuje, jak nastavit šířku čtecího pole. V našem příkladu je šířka pole pět znaků. Pokud zadáte řetězec s velkým počtem znaků, všechny znaky za 5. budou vyřazeny. Všimněte si volání funkce scanf(). Znak & nepředchází název pole, protože název pole je adresou prvního prvku pole.

/* Příklad 3 */

#zahrnout

void main (void)
{
název znaku;

Printf("\nZadejte své uživatelské jméno (ne více než 5 znaků):");
scanf("%5s", jméno);
printf("\nZadali jste %s", jméno);
}

Příklad 4.
Poslední příklad v tomto článku ukazuje, jak lze použít vyhledávací sadu. Po spuštění programu zadejte číslo od 2 do 5.

/* Příklad 4 */

#zahrnout

void main (void)
{
char bal;

Printf("Vaše hodnocení je 2,3,4,5:");
scanf("%", &bal);
printf("\nHodnocení %c", bal);
}