Archív Inet.sk Pôvodný autor: Michal Kyžňanský
30. 11. 2006 o 00:00 7992x

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

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.
IV. Diel C++ II. – objekt cin I.
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

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies