Preskočiť menu

Aligátor, Fórum, Pripojsa.sk, Servis, Speedmeter, Webhosting, Weblogy.sk
banner HP

Číta nás cez 130 tisíc ľudí | Autori | O Inet.sk | OZ IPV | Referáty | Reklama | RSS

IV. Diel C++ II. – objekt cin I.

30. 11. 2006, Programovanie, Michal Kyžňanský, 0 komentárov

V tomto dieli sa budeme venovať objektu cin, ktorý nám poskytne rôzne možnosti vstupu dát. Vysvetlíme si ako sa objekt cin správa, čo všetko nám umožňuje a čím sa líši od vstupných metód jazyka C.

Cin je v hierarchickom zaradení objektom triedy istream. Objekty cin a cout tvoria základné kamene vstupu a výstupu jazyka C++. Podobne ako objekt cout aj objekt cin chápe vstup ako prúd bajtov. Cin používa operátor bitového posunu >>, teda cin >>. Pre používanie objektu cin treba deklarovať v programe hlavičkový súbor príkazom #include <iostream>.

Rozdiely a podobnosti medzi cin >> a scanf ()

1. Syntax Jazyk C používal pre štandardný vstup z klávesnice príkaz scanf (), ktorý obsahoval okrem iného aj opätovné určenie dátového typu, ktorý chceme načítavať. Okrem iného príkaz scanf () tvorí zložitejší syntax, ktorý je vždy nutné písať.

int a;
scanf("%d",&a);


Pri použití objektu cin v jazyku C++ odpadá zložitý syntax. Objekt cin sa riadi deklaráciou premennej, do ktorej obsahu má načítavať dáta a nepotrebuje žiadne ďalšie určenie, ako je to v prípade funkcie scanf ().

int a;
std::cin >> a;

2. Viacnásobné načítavanie

int i;
char s[20];
int d;

V jazyku C++ poskytuje objekt cin skutočne jednoduché viacnásobné načítavanie. Nepotrebujeme prekladaču udávať, o aký dátový typ ideme načítavať, ale len zoradíme mená premenných a pospájame operátorom bitového posunu - <<. Viacnásobné načítavanie je veľmi podobné pri použití objektu cin a metódy scanf. Jediným, ale zato podstatným rozdielom, je spomínaná nutnosť udávania parametrov premenných pri použití funkcie scanf (). Tento spôsob je podobný, ako pri scanf (), len bez udávania parametrov dátových typov.

std::cout <<"zadajte cislo, retazec a cislo" << std::endl; 
std::cin >> i >> s >> d;


printf("zadajte cislo, retazec a cislo"); 
scanf("%d%s%d",&i, s, &d);

Absencia udávania parametra načítavanej premennej je hlavným rozdielom týchto dvoch spôsobov načítavania dát do programu. Čo sa týka funkčnosti, tak sú cin a scanf () takmer totožné a nemožno ich z tohto hľadiska posudzovať. Objekty cin a cout sú krokom vpred k objektovo orientovanému programovaniu a sú viac škáľovatelné a dajú sa lepšie prispôsobiť konkrétnemu použitiu ako printf () a scanf (). Objekty cin a cout dedia od nadradených tried metódy, takže nie sú len novšie, ale obsahujú aj kvalitnejšie a širšie možnosti.

Objekt cin pri vstupe porovnáva deklarácia premennej, do ktorej načítavame a vstupné dáta s prototypmi, ktoré obsahuje hlavičkový súbor iostream. Toto porovnávanie a vstup sa zvykne označovať ako formátovaný vstup. Pojem neformátovaný vstup si vysvetlíme nižšie. Definované prototypy sú : signed char, unsigned char, short, char, int, unsigned short, long, unsigned int, flout, double, long double a unsigned long.

Prejdeme k zaujímavejším úkonom s objektom cin, a tým sú zdedené metódy od triedy istream.

Metóda get ()

Táto metóda má veľmi široké použitie a záleží len aké parametre v nej použijeme. Povieme si o dvoch jej využitiach, pretože ostatné patria do kapitoly vstup a výstup do súborov. Touto kapitolou sa budeme zaoberať neskôr a k funkciám metódy get () sa ešte vrátime.

1. Použitie – načítavanie bloku dát

Metóda get () sa dá použiť na načítanie celého riadku textu, vrátane medzier. Ide o neformátovaný vstup. Pri tomto použití musí funkcia get () obsahovať 2 parametre. Jeden označuje miesto, kam budeme načítavať, t.j. pole znakov. Druhý parameter je číslo, ktoré hovorí koľko znakov sa má načítať. Pochopiteľne musí byť toto číslo menšie alebo rovné, ako je veľkosť poľa znakov. Dôležitou informáciou je, že metóda get () ponecháva znak pre nový riadok vo vstupnom prúde a tento znak bude prvým, ktorým sa začne ďalší vstup.

char text[50];

std::cout <<"zadajte text" << std::endl;
std::cin.get(text,50);
std::cout << text;

Vstup: Jazyk C++ nám dáva mocné nástroje
Výstup: Jazyk C++ nám dáva mocné nástroje

2. Použitie – načítavanie jedného znaku

Druhé použitie metódy get (), o ktorom si povieme spočíva v načítavaní jedného znaku. Parameter metódy je v tomto prípade iba premenná typu char. Funkcia get () predstavuje neformátovaný vstup, pretože znak medzery pre ňu nepredstavuje žiadne obmedzenie, ale berie ho ako normálny znak.

char ch;

std::cout <<"zadajte znak" << std::endl;
std::cin.get(ch);
std::cout << ch;

Vstup: A
Výstup: A

Metóda getline ()

Názov tejto metódy sám za seba vysvetľuje funkčnosť tejto metódy. Podobne ako metóda get () aj metóda getline () predstavuje neformátovaný vstup. Metóda načítava celý riadok, s medzerami a všetkými znakmi. Líši sa od funkcie get () tým, že znak pre nový riadok zo vstupného prúdu vyextrahuje/vytiahne. Pri použití obsahuje 2 parametre, presne rovnaké, ako u prvej verzie metódy get ().

char riadok[50];

std::cout <<"zadajte text" << std::endl;
std::cin.getline(riadok,50);
std::cout << riadok;

Metóda ignore ()

Táto metóda slúži k doladeniu dvoch vyššie uvedených. Jej použitím dosiahneme, aby bolo od začiatku načítavania ignorovaných n znakov.

char riadok[50];

std::cout <<"zadajte text" << std::endl;
std::cin.ignore(10);
std::cin.getline(riadok,50);
std::cout << riadok;

Vstup: Programovanie je zábavné
Výstup: nie je zábavné

Metóda read ()

Táto metóda sa používa často spoločne s metódou write () pri zápise/čítaní dát zo súboru. Načítava blok textu, takže ju možno zaradiť medzi metódy neformátovaného vstupu. Jej funkčnosť je totožná s metódou get () pri použití načítavania bloku dát. Rozdielom je, že neumiestni na koniec načítavaného bloku dát ukončovací znak, to znamená, že vstup neprevádza na reťazec v pravom zmysle slova.

char r[50];
std::cin.read(r,50);

Metóda peek ()

Táto metóda vám umožní pozrieť si nesledujúci znak, ale ona sama ho nenačíta. To znamená, že ide o akúsi kontrolu načítavania, bez jeho ovplyvnenia. Metóda peek () sa najčastejšie využíva spolu s podmienkami if, else, alebo cyklom while pri rozhodovaní, či budeme , alebo nebudeme pokračovať v načítavaní.

char c;
c = std::cin.peek();

Metóda gcount ()

Slúži na zistenie počtu načítaných znakov neformátovaného vstupu. To znamená, že ak načítavame text do poľa s určitou veľkosťou a zaujíma nás, aká časť z neho je zaplnená, resp. koľko znakov sa skutočne načítalo a zaplnilo pole, táto metóda nám na to dá odpoveď. Metóda spolupracuje s metódami triedy istream pre neformátovaný vstup – get (), getline (), read (), ignore (). Väčšina prekladačov má problémy so spočítavaním znakov pri použití metódy read ().

int c = 0;
std::cin.get(r,50);
c = std::cin.gcount();

Metóda putback ()

Slúži na vrátenie znaku späť do vstupného prúdu. Po tomto vrátení bude načítavanie pokračovať od tohto vrátaného znaku. Metóda neumožňuje len vrátenie načítaného znaku, ale aj akéhokoľvek iného znaku. Toto je možné využiť pri upravovaní načítavaného zdroja.

char c;
char b;

for(int i = 0; i < 3; i++){
c = std::cin.get();
}

std::cin.putback(c); //namiesto c by tu mohlo byť napr. ‘A’,
//alebo iný znak
b = std::cin.get(); //ktorý chceme vrátiť do vstupného reťazca


Metódy tellg () a seekg () si predstavíme v kapitolách vstup a výstup do súboru.

V ďalšom pokračovaní si objasníme detaily ohľadom toho, ako sa objekt cin správa k prúdom.

Súvisiace články

Prehľad všetkých dielov

Podobné články na Inet.sk

Diskusia k článku

Dátum Meno Predmet
Prejsť na diskusiu | Pridať komentár
Diskusia momentálne neobsahuje žiadne komentáre

Vyhľadávanie

Platená reklama

Textová reklama

notebook.pda.sk
E-shop zameraný na predaj mobilných zariadení. Hlavnou ponukou sú notebooky značky Apple, DELL a príslušenstvo.

EuroPhoto : Bratislava Photo | Vienna Photo | Prague Photo | London Photo | Paris Photo
Croatia | Bratislava Property
PROMA nábytok: najväčšia výroba: kuchynské linky, kuchyne a kuchynský nábytok. Pracovné dosky, úchytky, grafický 3D dizajn.

MSkozmetika: internetový predaj parfémov, kozmetiky a bižutérie. Mega parfuméria na webe. Značková a luxusná kozmetika.

Newsletter


Inet.sk – Internetový denník, ISSN 1336-1899
Copyright 2002 – 2010 Inet.sk, s. r. o., Všetky práva vyhradené, Neprešlo jazykovou úpravou

Partneri:
123velkoformatovatlac.sk Aaavizitky.sk Bilancia skrývky BiznisHosting.sk CinemaView.sk Digitálne fotoaparáty Digitlac.sk Fotografie Grafika.sk HrajSa.sk Katalog Pozri.sk Kusi.sk Manga.sk Notebooky HP Predaj PC komponenty Reality Aaainfo.sk Reklama.sk Sladká kytica StiahniTo.sk Surf.sk Toshiba PC akcia Úvery Aaainfo.sk Zájazdy