www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

scanf()

 

Funkce je určená pro čtení znaku z klávesnicového bufferu. Jedná s o specifickou funkci, která vyžaduje v prvním parametru definovat typ převodu obsahu klávesnicového bufferu dle formátu (int, char , string…), které se určuje parametrem („%d“, „%c“, „%s“).

 

Formát funkce scanf():

 

int scanf(const char *format[, address, ...]);

 

-          kde, funkce vrací int dle úspěšnosti provedené operace. Při úspěšném převodu do paměti vrací počet alokovaných bajtů. Při chybě vrací 0.

-          Format jsou parametry pro typ převodu na int, char a string („%d“, „%c“, „%s“)

-          Adresa  ukazuje na místo v paměti, kde je uložen první bajt nečteného typu

 

Specifika funkce scanf()

 

Funkce převádí bajtový obsah klávesnicového bufferu na pole charů s tím, že první bíle znaky (mezery) ignoruje. Po souvislém sledu znaků ukončených bílím znakem převod končí.

NAPŘ.:

Klávesnicový buffer: Ahoj Pavle, jak se máš

Scanf() : načte pouze „Ahoj“ a zbytek ignoruje

 

Čtení čísla int z klávesnice a hodnoty pomocí referenčního operátoru &

 

int cislo;                       //dimenzuje paměť pro int

scanf("%d",&cislo);      //& určuje, že se pracuje se skutečnou adresou int

cout<<cislo;                 //výstupní proud (monitor)

                                   //POZOR vypíše adresu kde leží int

while(getchar()!='e')     // čekací smyčka na písmeno 'e'

        ;                          // tělo while bez příkazů (proto ;)

        return 0;               // opouští aplikaci

 

Funkce scanf() zapíše číslo int na skutečnou adresu, kde leží int v paměti. Funkce scanf() vyžaduje, aby do něj vstupovala skutečná adresa místa, kde leží proměnná int.

 

JINAK LZE, TAKHLE:

 

Čtení čísla int z klávesnice a výpis hodnoty pomocí dereferenčního operátoru *

 

int *cislo;                     //definuje cislo jako ukazatel na typ int

scanf("%d",cislo);         //načte z klavesnicového buferu jako decimal int

cout<<*cislo;               //výstupní proud (monitor)

                                   //odkazuje se přes adresu, ale vypíše hodnotu int

while(getchar()!='e')     // čekací smyčka na písmeno 'e'

        ;                          // tělo while bez příkazů (proto ;)

        return 0;               // opouští aplikaci

 

Funkce scanf() zapíše číslo int na adresu cislo. My jsme si definovali ukazatel *cislo, který ukazuje na adresu, kde bylo číslo uložené. Adresa není vůbec podstatná, tu ví „počítač“ a může být kdykoliv jiná. Pro výstup jsme použili parametr ukazatele *cislo a „pocitac“ předá funkci cout<< adresu, kde leží první bajt prezentující hodnotu cislo. Cout ví, že se ukazuje na int, který má 4 (na 16bitech 2) bajty. Vezme je a přepočítá je na decimální číslo pro výstup na monitor.

 

Čtení znaků z klávesnice a výpis znaků

 

char slovo[10];            //dimenzuje paměť pro 10 charu (znaků)

scanf("%s",slovo);        //načte z klavesnicového buferu jako pole charů

cout<<slovo;               //výstupní proud (monitor)

                                   //odkazuje se na adresu, ale vypíše znaky

while(getchar()!='e')     // čekací smyčka na písmeno 'e'

        ;                          // tělo while bez příkazů (proto ;)

        return 0;               // opouští aplikaci

 

Program dimenzuje 10 bajtu v paměti, které jsou určeny pro uložení řetězce z funkce scanf(). Proměnná slovo je opět jen adresa, která ukazuje na první bajt vstupujícího řetězce. ADRESA není vůbec podstatná, tu ví „počítač“ a může být kdykoliv jiná. ADRESA+10 bajtu ukazuje na konec dimenzované paměti pro řetězec. Do této oblasti paměti bude uložen náš řetězec a za poslední bajt se uměle vloží nula (resp. znak /0). Do funkce cout vstupuje parametr slovo, který je ale ukazatelem na první bajt řetězce. Cout začne vypisovat znaky až narazí na /0, která říká, že se jedná o konec řetězce.

 

 

Čtení znaků z klávesnice a výpis jednoho znaků

 

char *slovo;                 //definuje slovo jako ukazatel na char

scanf("%s",slovo);        //načte do paměti, která není programátorem dimenzovaná.

slovo++;                      //zvýší ukazatel o 1bajt

cout<<*slovo;             //výstupní proud (monitor)

                                   //odkazuje se na adresu, ale vypíše znaky

while(getchar()!='e')     //čekací smyčka na písmeno 'e'

        ;                          // tělo while bez příkazů (proto ;)

        return 0;               //opouští aplikaci

 

Program definuje ukazatel *slovo na typ char. Funkce scanf() převede znaky z klávesnicového bufferu někam do paměti. To si určí „počítač“ sám a momentálně nejsme omezeni počtem znaků, neboť jsme staticky nedimenzovali velikost pole charů. První znak bude uložen na adresu v paměti, kam bude ukazovat *slovo. ADRESA není vůbec podstatná, tu ví „počítač“ a může být kdykoliv jiná. Funkce scanf() bude ukládat postupně do následujících paměťových buněk až vše ukončí znakem /0. Příkaz slovo++ způsobí zvýšení ukazatele slovo o jeden bajt. To znamená, že již neukazujeme na první znak, ale již na druhý znak našeho řetězce. Cout ví, že parametr vstupující je ukazatel na char *slovo. „Počítač“ sdělí adresu kam se ukazuje a cout vypíše jeden (nyní druhý) znak z námi zadaného řetězce.

 


Abecední seznam všech článků Vyhledání pojmů ve článcích




Popis HTML formátu
Velikost textu, barva textu, rozvržení stránky, obrázky, barva pozadí se zapisuje pomocí HTML příkazů.
stranky/html_tag
Databáze obrázků
Malé a velké obrázky, podlkady, tlačítka, okrasné čáry a pod.
datove_zdroje/obrazky
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
PHP práce s poli
Práce s poli a položkamy v PHP.
stranky/php_array
CSS html vlasnosti
Přehled CSS vlastností pro tvorbu webu
datove_zdroje/stranky/css
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Programování PHP
Články o programování webových stránek pomocí PHP.
internet/katalog_programovani_php
Databáze ikon
Ikony a malé obrázky pro tlačítka či jiné použití
datove_zdroje/icony/icony.php
Objektové programování c++
Jazyk C, Objektové programování c++
internet/katalog_programovani_c
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.