C++ istream Functions

C Istream Functions



Ang terminong 'stream' sa C++ ay naglalarawan sa daloy ng mga character sa pagitan ng thread ng programa at i/o. Ang mga klase ng stream ng C++ ay kinakailangan upang mag-input at mag-output ng mga aksyon sa mga IO device at file. Ang mga klase na ito ay idinisenyo upang pamahalaan ang input at output ng programa at mayroon silang partikular na pag-andar.

Stream Class Hierarchy

Ang isang klase ng C++ ay binubuo ng mga pamamaraan na kinakailangan upang pamahalaan at pamahalaan ang data na nilalaman nito.

float, doubles, at mga klase ay mga uri ng data na katulad ng int. Ang isang natatanging variable na may isang klase bilang uri ng data nito ay tinutukoy bilang isang bagay na C++. Ang paunang tinukoy na mga espesyal na bagay na 'cin' at 'cout' ay may iba't ibang klase bilang kanilang mga uri ng data.







Ang data na nakasulat sa 'cout' o nabasa mula sa 'cin' ay mga halimbawa ng data na dumadaloy papasok o palabas ng mga program sa C++. Sa kasalukuyan, isinasaalang-alang namin ang sumusunod na apat na klase para sa isang ito:



I-stream ito
Anumang layunin ay maaaring maihatid ng input stream na ito. Ang isang paglalarawan ng isang istream ay cin.



Ostream
Ito ay isang output stream na may ilang mga gamit. Ang mga ostream ay dumating sa anyo ng cout at cin.





Kung stream
Ito ay isang stream ng mga input file.

Ng stream
Ito ay isang stream ng mga output file. Ang inheritance ay isang paniwala na madalas na ginagamit sa object-oriented na programming, tulad ng sa C++, kung saan ang ilang mga klase ay kumukuha ng mga katangian ng iba pang mga klase na nagawa na. Ang mga klase ng ninuno ay nagiging mga espesyalisasyon ng kanilang mga sarili sa pamamagitan ng pagsasama ng mga bagong tampok.



Kung stream klase
Maaaring tratuhin ang isang ifstream sa parehong paraan tulad ng isang istream, na kung ano ito.

Ng stream class
Sa parehong paraan na gumagana ang ifstreams, ngunit may output sa halip na input, ang isang ofstream ay isang output file stream. Ang isang ofstream ay ginagamit sa parehong paraan tulad ng cout pagkatapos na mabuo, mabuksan, at ma-verify na walang mga error.

Ios klase
Mula sa klase na ito, bumaba ang lahat ng klase ng stream. Ang input at output stream ay dalawang magkaibang uri.

Tinutukoy nito ang mga bahagi ng stream na independiyente sa status ng input o output ng stream sa ios base.

Kabaligtaran sa mga miyembro na tinalakay sa ios base, ang mga miyembro na umaasa sa mga parameter ng template ay inilalarawan sa bahaging ito.

Stream(input)
Dahil sa pagiging kumplikado ng iostream library, hindi namin ito lubos na masasakop sa mga araling ito. Gayunpaman, iha-highlight namin ang mga function na pinakamadalas ginagamit. Sa seksyong ito, titingnan natin ang klase ng input mula sa iba't ibang mga anggulo (istream).

Nalaman namin na ang operator ng pagkuha (>>) ay gagamitin upang makuha ang data mula sa isang input stream.

STREAM

Sa C++ programming language, ang input stream ay pinangangasiwaan ng klase ng istream. Ang input ay binabasa at nauunawaan bilang isang serye ng mga character gamit ang mga input stream object na ito. Ang input ay hinahawakan ng cin.

Mga Klase ng Miyembro

istream::sentry
Isang klase na nagsasagawa ng maraming gawain at sa bawat oras na isinasagawa ang isang pamamaraan ng pag-input. Ang destructor nito ay hindi kinakailangan na magsagawa ng anumang mga aksyon. Gayunpaman, ang mga pagpapatupad ay maaaring magsagawa ng mga karagdagang gawain sa pagsisimula o paglilinis sa stream na ibinahagi ng lahat ng mga pagpapatakbo ng input sa pamamagitan ng paggamit ng paggawa at pagsira ng mga bagay na nagbabantay.

Mga pag-andar

istream::gcount
Nagbibigay ng bilang ng character na nakuha mula sa pinakakamakailang hindi na-format na pagkilos ng input ng object. Ang hindi na-format na mga pamamaraan ng pag-input—kumuha, getline, huwag pansinin, silip, basahin, basahin ang ilan, putback, at alisin—binabago ang halaga na ibinalik ng function na ito. Gayunpaman, tandaan na ang pagtawag ng mga silip, putback, o unget ay hindi nakakakuha ng anumang mga character. Bilang resulta, ang bilang ay palaging magbabalik ng 0.

istream::kunin
Ang nag-iisang character ay naglalabas ng isang character mula sa stream. Ang karakter ay maaaring itakda bilang halaga ng argumento o ibinalik (unang lagda) (pangalawang lagda).

C string: Kung naroroon ang delimiting character, hindi ito aalisin sa input sequence sa halip ay pinananatili bilang sumusunod na character na kukunin mula sa stream kung naroroon ito.

istream::getline
Inaalis ang mga character mula sa stream bilang hindi naka-format na input at i-save ang mga ito bilang isang c-string sa variable na 's' hanggang sa ang na-extract na character ay maging delimiting character o 'n' na mga character ay naisulat sa 's'. Bukod pa rito, hihinto ang pamamaraan sa pag-extract ng mga character kung umabot ito sa dulo ng file.

Sa panloob, ang function ay lumilikha ng isang bagay bago i-access ang input sequence. Sa wakas, pinapatay nito ang bagay bago bumalik, nag-extract ng mga character mula sa nauugnay nitong stream buffer object (ipagpalagay na maayos na ang lahat) na parang isinasagawa ang isa sa mga pamamaraan ng miyembro nito, sbumpc o sgetc.

istream::wag pansinin
Ang mga character ay kinuha mula sa input sequence at itinatapon nang paisa-isa hanggang sa ang alinman sa 'n' na mga character ay maalis o ang isa ay naghahambing ng katumbas ng delim. Bukod pa rito, kung maabot ang dulo ng file, ihihinto ng function ang pagkuha ng character. Itinatakda ng function ang flag na 'eofbit' kung umabot ito sa puntong ito nang masyadong maaga (bago mag-extract ng mga character o tumuklas ng delim).

Bago i-access ang pagkakasunud-sunod ng pag-input, ang function ay gagawa ng isang sentry object sa loob (na may noskipws ay magiging totoo). Sa wakas, pinapatay nito ang object ng sentry bago bumalik, nag-extract ng mga character mula sa nauugnay nitong stream buffer object (ipagpalagay na maayos na ang lahat) na parang isinasagawa ang isa sa mga pamamaraan ng miyembro nito: sbumpc o sgetc.

istream::operator>>
Inilalapat ng operator ng pagkuha (>>) ang operator na ito sa isang input stream. Mayroon itong masyadong maraming miyembro bilang isang function.

Uri ng Arithmetic

Inalis ang mga character mula sa stream at na-parse nang sunud-sunod upang kumatawan sa isang halaga ng tamang uri, na pagkatapos ay ise-save bilang ang halaga ng 'val'. Bago i-access ang pagkakasunud-sunod ng pag-input, ang function ay gumagawa ng isang bagay na nagbabantay sa loob (magiging mali ang noskipws). Kung maayos ang lahat, tatakbo ito ng num get::get para kumpletuhin ang mga proseso ng pagkuha at pag-parse habang binabago ang mga internal na flag ng estado ng stream. Ang sentry object ay tuluyang nawasak bago ito umalis.

Ang function ay panloob na bumubuo ng isang bagay na nagbabantay bago basahin ang pagkakasunud-sunod ng pag-input, ito ay tiningnan bilang gumaganap ng na-format na input. Sa wakas, pinapatay nito ang object ng sentry bago bumalik, nag-extract ng mga character mula sa nauugnay nitong stream buffer object (ipagpalagay na maayos na ang lahat) na parang isinasagawa ang isa sa mga pamamaraan ng miyembro nito, sbumpc o sgetc.

Mga Manipulator

Ang pf (*ito) ay tinatawag, kung saan ang pf ay maaaring isang manipulator. Ang mga manipulator ay mga gawaing nilikha partikular na tatawagin kapag ang operator na ito ay na-invoke. Ang input sequence ay hindi naaapektuhan ng pamamaraang ito at walang mga character na nakuha.

istream::putback
Sinusubukan ng na-restore na character na ilipat ang cursor pababa sa isang character sa stream upang ang huling character na nakuha mula sa stream ay muling ma-extract sa pamamagitan ng input operations.

Bago i-access ang pagkakasunud-sunod ng pag-input, ang function ay gumagawa ng isang object ng sentry sa loob. Pagkatapos ay tinawag nito ang sputbackc(c) sa nauugnay nitong stream buffer object (kung mabuti). Ang sentry object ay tuluyang nawasak bago ito umalis.

istream::basahin
Magbasa ng data block:

Ang mga character na 'n' ay kinuha mula sa stream at pagkatapos ay iniimbak sa array na itinuturo ng 's'. Ang function na ito ay kinokopya lamang ang isang bloke ng data nang hindi sinisiyasat ang mga nilalaman ng data o nagdaragdag ng isang null na character sa dulo.

Sa loob ng function, isang bagay na nagbabantay ay unang nilikha bago ma-access ang sequence ng input. Sa wakas, pinapatay nito ang object ng sentry bago bumalik, nag-extract ng mga character mula sa nauugnay nitong stream buffer object (ipagpalagay na maayos na ang lahat) na parang isinasagawa ang isa sa mga pamamaraan ng miyembro nito: sbumpc o sgetc.

Ang bilang ng miyembro ng pagtawag ay magbabalik ng kabuuang bilang ng mga character na maayos na nabasa at naimbak ng function na ito.

istream::readsome
Ang function na ito ay nakadepende sa panloob na paggana ng partikular na stream buffer object na naka-link sa stream, na ang pag-uugali ay higit na natukoy sa pagpapatupad para sa mga karaniwang klase.

Sa loob ng function, isang bagay na nagbabantay ay unang nilikha bago ma-access ang sequence ng input. Pagkatapos (kung matagumpay), tinatawagan nito ang function ng miyembro sa avail ng stream buffer object upang matukoy kung gaano karaming mga character ang available na ngayon bago tawagan ang 'sbumpc' upang kunin ang hanggang sa bilang ng mga character na iyon (o sgetc). Ang sentry object ay tuluyang nawasak bago ito umalis.

istream::seekg
Tinutukoy ng posisyon sa linya ng input kung saan kukunin ang sumusunod na character mula sa input stream. Bago basahin ang pagkakasunud-sunod ng pag-input, ang function ay panloob na bumubuo ng isang bagay na nagbabantay. Pagkatapos (kung OK), gumagawa ito ng isa sa dalawang tawag sa kaukulang stream buffer object: pubseekpos (1) o pubseekoff (2), (Kung mayroon). Sa wakas, pinawi nito ang item ng guwardiya at aalis.

istream::sync
I-align ang input buffer:

Dinadala ang naka-link na stream buffer ng kontroladong input sequence sa pag-sync. Tinutukoy ng partikular na pagpapatupad ng stream buffer object na konektado sa stream ang mga detalye ng operasyon.

istream::tellg
Kunin ang posisyon ng input sequence:

Nagbibigay ito ng posisyon ng kasalukuyang character sa input stream. Ang function pagkatapos ay nagbabalik -1. Kung nabigo ang miyembro, nagbabalik ito ng totoo.

Ibinabalik nito ang rdbuf()->pubseekoff kung hindi (0,cur,in). Ang sentry object ay tuluyang nawasak bago ito umalis.

istream::unget
Alisin ang karakter:

Sinusubukang ilipat ang cursor pababa sa isang character sa stream upang ang huling character na nakuha mula sa stream ay muling ma-extract sa pamamagitan ng input operations.

Hindi miyembre

operator>> (istream)
Ang operator ng pagkuha (>>) ay nagbibigay ng naka-format na input na may ganitong pagkilos kapag inilapat sa isang input stream.

Isang character: Kinukuha ng pagkakasunud-sunod ng character ang susunod na character mula dito at iniimbak ito bilang halaga ng 'c'. Ang proseso ng pagkuha ng mga character mula sa ay at pag-iimbak ng mga ito sa s, bilang isang c-string, hihinto (kung ang lapad ay hindi zero) kapag ang isang whitespace na character ay nakatagpo o (lapad ()-1) na mga character ay nakuha.

Extraction ng rvalue: nagbibigay-daan sa pag-extract mula sa rvalue istream na mga bagay, na may parehong resulta sa pagkuha mula sa lvalues: Ang tawag nito ay>>Val.

Halimbawa 1

Sa kasong ito, susuriin namin kung paano kami makakakuha ng anumang halaga mula sa user at pagkatapos ay ipakita ito bilang resulta sa screen.

#include
gamit namespace std ;
int pangunahing ( )
{
int Hindi ;
cout << 'Mangyaring maglagay ng numero' ;
kumakain >> Hindi ;
cout << 'Ang inilagay na halaga ay: ' << Hindi << ' \n ' ;
}

Isasama namin ang header file. Susunod, gagamitin namin ang namespace na 'std' sa karaniwang namespace. Tatawagin namin ang function na main(). Ang isang variable na pinangalanang 'hindi' ay idedeklara sa loob ng pamamaraang ito. Ang uri ng data na 'int' ay kinakatawan para sa variable na ito. Ang terminong 'int' ay ang pagdadaglat ng isang integer. Pagkatapos, ginamit ang pahayag na 'cout'. Ang command na ito ay nagpi-print ng linya.

Ilalagay ng user ang anumang random na halaga pagkatapos na maipakita ang tekstong ito sa screen. Pagkatapos, ang pahayag na 'cin' ay ginamit sana. Ang utos na ito ay nangangailangan ng user na ipahiwatig ang halaga. Ang inilagay na numero ng user ay mase-save sa isang variable. Ang halaga na ibinigay ng user ay ipapakita sa screen gamit ang command na 'cout'.

Halimbawa 2

Sa pagkakataong ito, makikita natin kung paano natin makukuha ang anumang pangalan mula sa user at pagkatapos ay ipapakita ito sa screen bilang kinalabasan.

#include
gamit namespace std ;

int pangunahing ( )

{

char pangalan [ 125 ] ;
cout << 'Ilagay ang iyong pangalan' << endl ;


kumakain >> ws ;

kumakain . getline ( pangalan, 125 ) ;

cout << pangalan << endl ;

bumalik 0 ;

}

Isasama namin ang header file na . Susunod, gagamitin namin ang karaniwang namespace bilang 'std'. Tatawagin namin ang main() function. Sa loob ng pamamaraang ito, magdedeklara kami ng variable. Hawak ng variable na ito ang uri ng data na 'char'. Pagkatapos ay ginagamit ang pahayag na 'cout'. Ipinapakita ng command na ito ang text na 'Ipasok ang iyong pangalan' sa screen. Pagkatapos ipakita ang tekstong ito sa screen, ilalagay ng user ang anumang pangalan. Pagkatapos, gagamitin namin ang pahayag na 'cin'.

Kinukuha ng command na ito ang halaga mula sa user. Ang ibinigay na pangalan ay maiimbak sa isang variable na 'ws'. Dito, muli, gagamitin namin ang utos na 'cin'. Sa loob ng command na ito, ang getline() function ay inilalapat. Ang function na ito ay naglalaman ng parameter na kinabibilangan ng pangalang ipinasok ng user at ang haba ng pangalan. Ang command na 'cout' ay gagamitin upang ipakita ang pangalan na ibinigay ng user. Upang wakasan ang code, gagamitin ang command na 'return 0'.

Konklusyon

Una, napag-usapan namin kung ano ang C++ istream function. Pagkatapos ay naobserbahan namin ang ilang mga function at mahahalagang kahulugan na binanggit. Sa artikulong ito, nagpatakbo kami ng iba't ibang mga code na naglalaman ng iba't ibang mga function ng istream. Sa unang code, kukuha kami ng anumang numero mula sa user at ipinapakita ang numerong iyon sa screen. Sa pangalawa, ipinasok ng user ang pangalan at na-print ang pangalang iyon sa screen.