Funkcie C++ istream

Funkcie C Istream



Termín „stream“ v C++ popisuje tok znakov medzi programovým vláknom a i/o. Triedy prúdov C++ sú potrebné na vstup a výstup akcií na IO zariadeniach a súboroch. Tieto triedy sú navrhnuté tak, aby spravovali vstup a výstup programu a majú konkrétnu funkčnosť.

Hierarchia tried streamu

Trieda C++ sa skladá z metód potrebných na správu a riadenie údajov, ktoré obsahuje.

float, doubles a class sú dátové typy podobné int. Jedinečná premenná s triedou ako typom údajov sa označuje ako objekt C++. Vopred špecifikované špeciálne objekty „cin“ a „cout“ majú rôzne triedy ako typy údajov.







Údaje zapísané do „cout“ alebo načítané z „cin“ sú príklady tokov údajov do alebo z programov v C++. V súčasnosti uvažujeme o týchto štyroch triedach:



Streamujte to
Tento vstupný tok môže slúžiť na akýkoľvek účel. Ilustráciou istreamu je cin.



Ostream
Ide o výstupný prúd s viacerými možnosťami využitia. Ostreamy prichádzajú vo forme cout a cin.





Ak stream
Je to prúd vstupných súborov.

Z prúdu
Je to prúd výstupných súborov. Dedičnosť je pojem, ktorý sa vo veľkej miere používa v objektovo orientovanom programovaní, ako napríklad v C++, kde niektoré triedy preberajú vlastnosti iných tried, ktoré už boli vytvorené. Triedy predkov sa potom stanú špecializáciou samých seba prostredníctvom zahrnutia nových funkcií.



Ak trieda prúdu
S ifstream možno zaobchádzať rovnakým spôsobom ako s istreamom, čo je to, čo je.

Prúdová trieda
Rovnakým spôsobom, ako funguje ifstreams, ale s výstupom namiesto vstupu, je ofstream výstupný súborový prúd. Po skonštruovaní, otvorení a overení, že neobsahuje chyby, sa ofstream používa rovnakým spôsobom ako cout.

trieda Ios
Z tejto triedy pochádzajú všetky triedy prúdov. Vstupné a výstupné toky sú dva rôzne typy.

Definuje časti toku, ktoré sú nezávislé od stavu vstupu alebo výstupu toku v základni ios.

Na rozdiel od členov, o ktorých sa diskutuje v základni ios, sú v tejto časti popísané členy, ktoré závisia od parametrov šablóny.

Stream (vstup)
Kvôli zložitosti knižnice iostream ju v týchto lekciách nebudeme môcť úplne pokryť. Zdôrazníme však funkcie, ktoré sa používajú najčastejšie. V tejto časti sa pozrieme na triedu vstupu z rôznych uhlov (istream).

Dozvedeli sme sa, že operátor extrakcie (>>) sa použije na získanie údajov zo vstupného toku.

PRÚD

V programovacom jazyku C++ je vstupný tok spracovávaný triedou istream. Vstup sa číta a chápe ako séria znakov pomocou týchto objektov vstupného toku. O vstup sa stará cin.

Členské triedy

istream::sentry
Trieda, ktorá vykonáva veľa úloh a zakaždým, keď sa vykoná vstupná procedúra. Jeho deštruktor nie je povinný vykonávať žiadne akcie. Implementácie však môžu vykonávať ďalšie úlohy spustenia alebo čistenia v prúde zdieľanom všetkými vstupnými operáciami pomocou vytvárania a ničenia strážnych objektov.

Funkcie

istream::gcount
Udáva počet znakov, ktorý bol získaný z poslednej neformátovanej vstupnej akcie objektu. Neformátované vstupné procedúry – get, getline, ignore, peek, read, read some, putback a unget – menia hodnotu vrátenú touto funkciou. Majte však na pamäti, že volanie peeks, putback alebo unget neextrahuje žiadne znaky. Výsledkom je, že počet vždy vráti 0.

istream::get
Jediný znak odoberie jeden znak zo streamu. Znak sa buď nastaví ako hodnota argumentu, alebo sa vráti (prvý podpis) (druhý podpis).

Reťazec C: Ak je prítomný vymedzovací znak, neodstráni sa zo vstupnej sekvencie, ale ponechá sa ako nasledujúci znak, ktorý sa má načítať z prúdu, ak je prítomný.

istream::getline
Odstráni znaky zo streamu ako neformátovaný vstup a uloží ich ako c-reťazec do premennej „s“, kým sa extrahovaný znak nestane oddeľovacím znakom alebo kým sa znaky „n“ nezapíšu do „s“. Okrem toho metóda zastaví extrahovanie znakov, ak dosiahne koniec súboru.

Funkcia interne vytvorí objekt pred prístupom k vstupnej sekvencii. Nakoniec objekt pred návratom zabije, pričom extrahuje znaky z pridruženého objektu vyrovnávacej pamäte prúdu (za predpokladu, že je všetko v poriadku), ako keby vykonával jednu z jeho členských metód, sbumpc alebo sgetc.

istream::ignorujte
Znaky sa preberajú zo vstupnej sekvencie a zahadzujú sa jeden po druhom, kým sa nevyberie buď „n“ znakov, alebo kým sa neporovná jeden s deliacim znakom. Okrem toho, ak sa dosiahne koniec súboru, funkcia zastaví extrakciu znakov. Funkcia nastaví príznak „eofbit“, ak tento bod dosiahne príliš skoro (pred extrahovaním n znakov alebo objavením delim).

Pred prístupom k vstupnej sekvencii funkcia vytvorí interne strážny objekt (s noskipw bude pravda). Nakoniec zabije objekt sentry pred návratom, pričom extrahuje znaky z jeho súvisiaceho objektu vyrovnávacej pamäte prúdu (za predpokladu, že je všetko v poriadku), ako keby vykonával jednu z jeho členských metód: sbumpc alebo sgetc.

istream::operátor>>
Operátor extrakcie (>>) použije tento operátor na vstupný tok. Má príliš veľa členov ako funkciu.

Aritmetický typ

Znaky sa vyberú z prúdu a sekvenčne sa analyzujú, aby predstavovali hodnotu správneho typu, ktorá sa potom uloží ako hodnota „val“. Pred prístupom k vstupnej sekvencii funkcia skonštruuje interne strážny objekt (noskipws bude nepravdivé). Ak je všetko v poriadku, spustí sa num get::get na dokončenie procesov extrakcie a analýzy pri úprave vnútorných príznakov stavu toku. Strážny objekt je nakoniec zničený skôr, ako odíde.

Funkcia interne generuje strážny objekt pred načítaním vstupnej sekvencie, je vnímaná ako vykonávajúca formátovaný vstup. Nakoniec zabije objekt sentry pred návratom, pričom extrahuje znaky z jeho súvisiaceho objektu vyrovnávacej pamäte prúdu (za predpokladu, že je všetko v poriadku), ako keby vykonával jednu z jeho členských metód, sbumpc alebo sgetc.

Manipulátory

Volá sa pf (*this), kde pf môže byť manipulátor. Manipulátory sú rutiny vytvorené špeciálne na volanie, keď je vyvolaný tento operátor. Vstupná sekvencia nie je týmto postupom ovplyvnená a žiadne znaky sa neextrahujú.

istream::putback
Obnovený znak sa pokúsi posunúť kurzor o jeden znak nadol v prúde, aby sa posledný znak získaný z prúdu mohol opäť extrahovať pomocou vstupných operácií.

Pred prístupom k vstupnej sekvencii funkcia interne skonštruuje strážny objekt. Potom zavolá sputbackc(c) na súvisiacom objekte vyrovnávacej pamäte toku (ak je dobrý). Strážny objekt je nakoniec zničený skôr, ako odíde.

istream::čítaj
Čítanie bloku údajov:

Znaky „n“ sa prevezmú z prúdu a potom sa uložia do poľa, na ktoré ukazuje písmeno „s“. Táto funkcia iba replikuje blok údajov bez kontroly obsahu údajov alebo pridania nulového znaku na koniec.

V rámci funkcie sa najskôr vytvorí strážny objekt pred prístupom k vstupnej sekvencii. Nakoniec zabije objekt sentry pred návratom, pričom extrahuje znaky z jeho súvisiaceho objektu vyrovnávacej pamäte prúdu (za predpokladu, že je všetko v poriadku), ako keby vykonával jednu z jeho členských metód: sbumpc alebo sgetc.

Volajúci počet členov vráti celkový počet znakov, ktoré táto funkcia správne prečítala a uložila.

istream::readsome
Táto funkcia je závislá na vnútornom fungovaní konkrétneho objektu vyrovnávacej pamäte prúdu prepojeného s prúdom, ktorého správanie je do značnej miery implementačne definované pre štandardné triedy.

V rámci funkcie sa najskôr vytvorí strážny objekt pred prístupom k vstupnej sekvencii. Potom (ak bude úspešná) zavolá členskú funkciu v objekte streamovej vyrovnávacej pamäte, aby určila, koľko znakov je teraz dostupných, a potom zavolá „sbumpc“ na extrahovanie tohto počtu znakov (alebo sgetc). Strážny objekt je nakoniec zničený skôr, ako odíde.

istream::seekg
Pozícia vo vstupnom riadku určuje, kde sa zo vstupného toku vytiahne nasledujúci znak. Pred čítaním vstupnej sekvencie funkcia interne skonštruuje strážny objekt. Potom (ak je v poriadku), vykoná jedno z dvoch volaní na príslušný objekt vyrovnávacej pamäte toku: pubseekpos (1) alebo pubseekoff (2), (ak existuje). Nakoniec zničí strážny predmet a odíde.

istream::sync
Zarovnajte vstupnú vyrovnávaciu pamäť:

Synchronizuje riadenú vstupnú sekvenciu prepojenej vyrovnávacej pamäte toku. Špecifická implementácia objektu vyrovnávacej pamäte prúdu pripojeného k prúdu určuje špecifiká operácie.

istream::tellg
Získajte pozíciu vstupnej sekvencie:

Udáva polohu aktuálnej postavy vo vstupnom toku. Funkcia potom vráti -1. Ak člen zlyhá, vráti hodnotu true.

Ak nie, vráti rdbuf()->pubseekoff (0,cur,in). Strážny objekt je nakoniec zničený skôr, ako odíde.

istream::unget
Odstrániť znak:

Pokúsi sa posunúť kurzor o jeden znak nadol v prúde, aby bolo možné pomocou vstupných operácií znova extrahovať posledný znak získaný z prúdu.

Nečlen

operátor >> (istream)
Operátor extrakcie (>>) poskytuje formátovaný vstup s touto akciou, keď sa aplikuje na vstupný tok.

Jeden znak: Sekvencia znakov z neho vyberie ďalší znak a uloží ho ako hodnotu „c“. Proces extrakcie znakov z is a ich ukladanie do s, ako c-reťazca, sa zastaví (ak šírka nie je nula), keď sa narazí na znak medzery alebo sa extrahujú znaky (šírka ()-1).

Extrakcia rvalue: umožňuje extrahovať z rvalue objektov istream, čo má rovnaký výsledok ako extrahovanie z lvalues: Volá is>>Val.

Príklad 1

V tomto prípade by sme preskúmali, ako môžeme získať akúkoľvek hodnotu od používateľa a potom ju zobraziť ako výsledok na obrazovke.

#include
použitím menný priestor std ;
int hlavné ( )
{
int Nie ;
cout << 'Zadajte číslo' ;
jedenie >> Nie ;
cout << 'Zadaná hodnota je: ' << Nie << ' \n ' ;
}

Zahrnuli by sme hlavičkový súbor . Ďalej použijeme menný priestor „std“ v štandardnom mennom priestore. Funkciu by sme nazvali main(). V rámci tejto metódy bude deklarovaná premenná s názvom „no“. Pre túto premennú je reprezentovaný dátový typ „int“. Výraz „int“ je skratkou celého čísla. Potom sa použije výraz „cout“. Tento príkaz vytlačí riadok.

Po zobrazení tohto textu na obrazovke používateľ zadá ľubovoľnú náhodnú hodnotu. Potom by sa použilo vyhlásenie „cin“. Tento príkaz vyžaduje, aby používateľ uviedol hodnotu. Zadané číslo používateľa sa uloží do premennej. Hodnota poskytnutá používateľom by sa zobrazila na obrazovke pomocou príkazu „cout“.

Príklad 2

V tomto prípade by sme videli, ako dostaneme nejaké meno od používateľa a potom ho zobrazíme na obrazovke ako výsledok.

#include
použitím menný priestor std ;

int hlavné ( )

{

char názov [ 125 ] ;
cout << 'Zadajte svoje meno' << endl ;


jedenie >> ws ;

jedenie . getline ( názov, 125 ) ;

cout << názov << endl ;

vrátiť 0 ;

}

Začlenili by sme hlavičkový súbor . Ďalej použijeme štandardný menný priestor ako „std“. Vyvolali by sme funkciu main(). V rámci tejto metódy budeme deklarovať premennú. Táto premenná obsahuje typ údajov „char“. Potom sa použije vyhlásenie „cout“. Tento príkaz zobrazí na obrazovke text „Zadajte svoje meno“. Po zobrazení tohto textu na obrazovke by používateľ zadal ľubovoľné meno. Potom by sme použili vyhlásenie „cin“.

Tento príkaz preberá hodnotu od užívateľa. Zadaný názov by bol uložený v premennej „ws“. Tu by sme opäť použili príkaz „cin“. V rámci tohto príkazu sa aplikuje funkcia getline(). Táto funkcia obsahuje parameter, ktorý obsahuje meno zadané používateľom a dĺžku mena. Príkaz „cout“ sa použije na zobrazenie mena poskytnutého používateľom. Na ukončenie kódu sa použije príkaz „návrat 0“.

Záver

Najprv sme hovorili o tom, čo sú funkcie C++ istream. Potom sledujeme niekoľko spomínaných funkcií a dôležitých definícií. V tomto článku sme spustili rôzne kódy, ktoré obsahujú rôzne funkcie istream. V prvom kóde vezmeme od používateľa ľubovoľné číslo a zobrazíme ho na obrazovke. V druhom z nich používateľ zadal meno a vytlačil ho na obrazovku.