C++ istream -funktiot

C Istream Funktiot



Termi 'virta' C++:ssa kuvaa merkkien kulkua ohjelman säikeen ja i/o:n välillä. C++-streamiluokkia tarvitaan IO-laitteiden ja -tiedostojen toimintojen syöttämiseen ja tulostamiseen. Nämä luokat on suunniteltu hallitsemaan ohjelman syöttöä ja tulosta, ja niillä on erityisiä toimintoja.

Suoratoistoluokkahierarkia

C++-luokka koostuu menetelmistä, joita tarvitaan sen sisältämien tietojen hallintaan ja hallitsemiseen.

float, doubles ja classs ovat tietotyyppejä, jotka ovat samanlaisia ​​kuin int. Yksilöllistä muuttujaa, jonka tietotyyppi on luokka, kutsutaan C++-objektiksi. Ennalta määritetyillä erikoisobjekteilla 'cin' ja 'cout' on erilaisia ​​luokkia tietotyypeinä.







Data, joka on kirjoitettu 'cout':iin tai lue 'cin'sta, on esimerkkejä tietovirroista C++:n ohjelmiin tai niistä ulos. Tällä hetkellä harkitsemme seuraavia neljää luokkaa:



Suoratoista se
Tämä syöttövirta voi palvella mitä tahansa tarkoitusta. Esimerkki istreamista on cin.



Ostream
Se on ulostulovirta, jolla on useita käyttötarkoituksia. Ostreamit ovat muotoja cout ja cin.





Jos stream
Se on syötetiedostojen virta.

Virrasta
Se on tulostustiedostojen virta. Periytys on käsite, jota käytetään runsaasti olioohjelmoinnissa, kuten C++:ssa, jossa jotkin luokat ottavat jo luotujen muiden luokkien ominaisuudet. Esivanhempien luokista tulee sitten itsensä erikoisaloja uusien ominaisuuksien myötä.



Jos stream-luokka
Ifstreamiä voidaan käsitellä samalla tavalla kuin istreamia, mikä se on.

Stream-luokasta
Samalla tavalla kuin ifstreams-toiminnot, mutta ulostulolla tulon sijaan, ofstream on tulostiedostovirta. Virtausta käytetään samalla tavalla kuin cout sen jälkeen, kun se on rakennettu, avattu ja tarkistettu, ettei siinä ole virheitä.

Ios-luokka
Tästä luokasta kaikki stream-luokat laskeutuivat. Tulo- ja lähtövirrat ovat kahta eri tyyppiä.

Se määrittää virran osat, jotka ovat riippumattomia virran tulo- tai lähtötilasta ios-pohjassa.

Toisin kuin ios-pohjassa käsitellyt jäsenet, tässä osassa kuvataan malliparametreista riippuvat jäsenet.

Stream (syöttö)
Iostream-kirjaston monimutkaisuuden vuoksi emme voi kattaa sitä kokonaan näillä oppitunneilla. Korostamme kuitenkin eniten käytetyt toiminnot. Tässä osiossa tarkastelemme syöttöluokkaa useista eri näkökulmista (istream).

Olemme oppineet, että erotusoperaattoria (>>) käytetään tietojen hankkimiseen syöttövirrasta.

STREAM

C++-ohjelmointikielessä syöttövirtaa käsittelee istream-luokka. Syöttö luetaan ja ymmärretään merkkisarjana käyttämällä näitä syötevirtaobjekteja. Syötön käsittelee cin.

Jäsenluokat

istream::sentry
Luokka, joka suorittaa monia tehtäviä ja joka kerta, kun suoritetaan syöttötoiminto. Sen tuhoajan ei tarvitse suorittaa mitään toimia. Toteutukset voivat kuitenkin suorittaa ylimääräisiä käynnistys- tai puhdistustehtäviä kaikkien syöttötoimintojen jakamassa virrassa käyttämällä vartioobjektien luomista ja tuhoamista.

Toiminnot

istream::gcount
Antaa merkkimäärän, joka saatiin objektin viimeisimmästä muotoilemattomasta syöttötoiminnosta. Muotoilemattomat syöttötoimenpiteet - get, getline, ohittaa, kurkistaa, lukea, lukea joitakin, putback ja unget - muuttavat tämän funktion palauttamaa arvoa. Muista kuitenkin, että peeks-, putback- tai unget-kutsu ei poimi mitään merkkejä. Tämän seurauksena laskuri palauttaa aina 0:n.

istream::get
Yksittäinen merkki ottaa yhden merkin ulos virrasta. Merkki asetetaan joko argumentin arvoksi tai palautetaan (ensimmäinen allekirjoitus) (toinen allekirjoitus).

C-merkkijono: Jos rajaava merkki on olemassa, sitä ei poisteta syöttösekvenssistä, vaan se säilytetään seuraavana merkkinä, joka haetaan virrasta, jos se on olemassa.

istream::getline
Poistaa merkit virrasta muotoilemattomana syötteenä ja tallentaa ne c-merkkijonona muuttujaan 's', kunnes poimitusta merkistä tulee rajamerkki tai 'n' merkkiä on kirjoitettu 's':ksi. Lisäksi menetelmä lopettaa merkkien purkamisen, jos se saavuttaa tiedoston loppuun.

Sisäisesti toiminto luo objektin ennen syöttösekvenssin käyttöä. Lopuksi se tappaa objektin ennen paluuta ja poimii merkkejä siihen liittyvästä stream-puskuriobjektista (olettaen, että kaikki on kunnossa) ikään kuin suorittaisi jotakin sen jäsenmetodeista, sbumpc tai sgetc.

istream::ignore
Merkit otetaan syöttösekvenssistä ja hylätään yksi kerrallaan, kunnes joko 'n' merkkiä on poistettu tai yhtä verrataan erotteluun. Lisäksi, jos tiedoston loppu saavutetaan, funktio pysäyttää merkkien purkamisen. Funktio asettaa 'eofbit'-lipun, jos se saavuttaa tämän pisteen liian aikaisin (ennen n merkin poimimista tai delimin löytämistä).

Ennen syöttösekvenssiin pääsyä funktio rakentaa vartioobjektin sisäisesti (jos noskipws on tosi). Lopuksi se tappaa vartioobjektin ennen paluuta ja poimii merkkejä siihen liittyvästä stream-puskuriobjektista (olettaen, että kaikki on kunnossa) ikään kuin suorittaisi jotakin sen jäsenmetodeista: sbumpc tai sgetc.

istream::operaattori >>
Poimintaoperaattori (>>) käyttää tätä operaattoria syöttövirtaan. Sillä on funktiona liian monta jäsentä.

Aritmeettinen tyyppi

Merkit otetaan pois virrasta ja jäsennetään peräkkäin edustamaan oikeantyyppistä arvoa, joka sitten tallennetaan 'val'-arvona. Ennen syöttösekvenssiin pääsyä funktio rakentaa vartioobjektin sisäisesti (noskipws on epätosi). Jos kaikki on kunnossa, se suorittaa sitten num get::get suorittaakseen purku- ja jäsennysprosessit samalla kun muokataan virran sisäisiä tilalippuja. Vartioobjekti tuhoutuu lopulta ennen kuin se lähtee.

Toiminto luo sisäisesti vartijaobjektin ennen syöttösekvenssin lukemista, sen katsotaan suorittavan muotoiltua syötettä. Lopuksi se tappaa vartioobjektin ennen paluuta ja poimii merkkejä siihen liittyvästä stream-puskuriobjektista (olettaen, että kaikki on kunnossa) ikään kuin suorittaisi jotakin jäsenmetodeistaan, sbumpc tai sgetc.

Manipulaattorit

Pf:tä (*this) kutsutaan, missä pf voisi olla manipulaattori. Manipulaattorit ovat rutiineja, jotka on luotu erityisesti kutsuttavaksi, kun tätä operaattoria kutsutaan. Tämä menettely ei vaikuta syöttösekvenssiin, eikä merkkejä poimita.

istream::putback
Palautettu merkki yrittää siirtää kohdistinta yhden merkin alaspäin virrassa, jotta viimeinen virrasta haettu merkki voidaan jälleen poimia syöttötoiminnoilla.

Ennen syöttösekvenssiin pääsyä funktio rakentaa vartioobjektin sisäisesti. Sitten se kutsuu sputbackc(c) siihen liittyvässä virtapuskuriobjektissa (jos hyvä). Vartioobjekti tuhoutuu lopulta ennen kuin se lähtee.

istream::read
Lue tietolohko:

'n'-merkit otetaan virrasta ja tallennetaan sitten taulukkoon, johon 's' osoittaa. Tämä toiminto vain replikoi tietolohkon tarkistamatta tietojen sisältöä tai lisäämättä loppuun tyhjää merkkiä.

Toiminnon sisällä luodaan ensin vartijaobjekti, ennen kuin syöttösekvenssiin päästään. Lopuksi se tappaa vartioobjektin ennen paluuta ja poimii merkkejä siihen liittyvästä stream-puskuriobjektista (olettaen, että kaikki on kunnossa) ikään kuin suorittaisi jotakin sen jäsenmetodeista: sbumpc tai sgetc.

Kutsuvien jäsenten määrä palauttaa tämän toiminnon oikein lukemien ja tallentamien merkkien kokonaismäärän.

istream::readsome
Tämä toiminto on riippuvainen virtaan linkitetyn tietyn stream-puskuriobjektin sisäisestä toiminnasta, jonka käyttäytyminen on suurelta osin standardiluokkien toteutusmääriteltyä.

Toiminnon sisällä luodaan ensin vartijaobjekti, ennen kuin syöttösekvenssiin päästään. Sitten (jos onnistuu), se kutsuu stream-puskuriobjektin avail-jäsenfunktiota määrittääkseen, kuinka monta merkkiä on nyt käytettävissä, ennen kuin kutsuu 'sbumpc'-toiminnon poimimaan enintään kyseisen määrän merkkejä (tai sgetc). Vartioobjekti tuhoutuu lopulta ennen kuin se lähtee.

istream::seekg
Sijainti syöttörivillä määrittää, minne seuraava merkki vedetään syöttövirrasta. Ennen syöttösekvenssin lukemista funktio rakentaa sisäisesti vartioobjektin. Sitten (jos OK), se soittaa toisen kahdesta kutsusta vastaavalle stream-puskuriobjektille: pubseekpos (1) tai pubseekoff (2), (jos sellainen on). Lopulta se hävittää vartiokohteen ja lähtee.

istream::sync
Kohdista syöttöpuskuri:

Synkronoi linkitetyn suoratoistopuskurin ohjatun syöttösekvenssin. Virtaan yhdistetyn stream-puskuriobjektin erityinen toteutus määrää toiminnan erityispiirteet.

istream::tellg
Hanki syöttösekvenssin sijainti:

Se ilmoittaa nykyisen hahmon sijainnin syöttövirrassa. Funktio palauttaa sitten -1. Jos jäsen epäonnistuu, se palauttaa tosi.

Se palauttaa rdbuf()->pubseekoff, jos ei (0,cur,in). Vartioobjekti tuhoutuu lopulta ennen kuin se lähtee.

istream::unget
Poista merkki:

Yrittää siirtää kohdistinta yhden merkin alaspäin virrassa, jotta virrasta viimeksi haettu merkki voidaan jälleen poimia syöttötoiminnoilla.

Ei jäsen

operaattori >> (istream)
Poimintaoperaattori (>>) antaa muotoillun syötteen tällä toiminnolla, kun sitä käytetään syöttövirtaan.

Yksi merkki: Merkkisarja ottaa siitä seuraavan merkin ja tallentaa sen 'c':n arvoksi. Merkkien poimiminen ja tallentaminen s-kirjaimeen c-merkkijonona pysähtyy (jos leveys ei ole nolla), kun välilyöntimerkki havaitaan tai (leveys ()-1) merkit on purettu.

Rvalue:n purkaminen: mahdollistaa istream-objektien purkamisen rvaluesta, jolla on sama tulos kuin lvalue-objektien poimimisessa: Se kutsuu is>>Val.

Esimerkki 1

Tässä tapauksessa tutkisimme, kuinka saamme käyttäjältä minkä tahansa arvon, ja näyttäisimme sen tuloksena näytöllä.

#include
käyttämällä nimiavaruus std ;
int pää ( )
{
int Ei ;
cout << 'Syötä numero' ;
syöminen >> Ei ;
cout << 'Syötetty arvo on:' << Ei << ' \n ' ;
}

Sisällytämme -otsikkotiedoston. Seuraavaksi käytämme nimiavaruutta 'std' vakionimiavaruudessa. Kutsumme funktiota main(). Muuttuja nimeltä 'no' ilmoitetaan tässä menetelmässä. Tietotyyppi 'int' on edustettuna tälle muuttujalle. Termi 'int' on lyhenne kokonaisluvusta. Myöhemmin käytetään 'cout'-lausetta. Tämä komento tulostaa rivin.

Käyttäjä syöttää minkä tahansa satunnaisen arvon, kun tämä teksti on näytetty näytöllä. Sitten olisi käytetty 'cin'-lausetta. Tämä komento edellyttää, että käyttäjä ilmoittaa arvon. Käyttäjän antama numero tallennettaisiin muuttujaan. Käyttäjän antama arvo näytetään näytöllä 'cout'-komennolla.

Esimerkki 2

Tässä tapauksessa näkisimme, kuinka saamme minkä tahansa nimen käyttäjältä ja näytämme sen sitten näytöllä tuloksena.

#include
käyttämällä nimiavaruus std ;

int pää ( )

{

hiiltyä nimi [ 125 ] ;
cout << 'Kirjoita nimesi' << endl ;


syöminen >> ws ;

syöminen . getline ( nimi, 125 ) ;

cout << nimi << endl ;

palata 0 ;

}

Sisällytämme otsikkotiedoston . Seuraavaksi käytämme vakionimiavaruutta nimellä 'std'. Kutsumme main()-funktion. Tässä menetelmässä ilmoitamme muuttujan. Tämä muuttuja sisältää 'char' -tietotyypin. Sitten käytetään 'cout'-lausetta. Tämä komento näyttää näytöllä tekstin 'Syötä nimesi'. Kun tämä teksti on näkynyt näytöllä, käyttäjä syöttää minkä tahansa nimen. Sitten käyttäisimme 'cin'-lausetta.

Tämä komento ottaa arvon käyttäjältä. Annettu nimi tallennettaisiin muuttujaan 'ws'. Tässä jälleen kerran käyttäisimme 'cin'-komentoa. Tässä komennossa käytetään getline()-funktiota. Tämä toiminto sisältää parametrin, joka sisältää käyttäjän syöttämän nimen ja nimen pituuden. 'cout'-komentoa käytetään näyttämään käyttäjän antama nimi. Koodin lopettamiseksi käytetään 'return 0' -komentoa.

Johtopäätös

Ensin puhuimme siitä, mitä ovat C++ istream -toiminnot. Sitten tarkastelemme useita mainittuja toimintoja ja tärkeitä määritelmiä. Tässä artikkelissa olemme suorittaneet erilaisia ​​koodeja, jotka sisältävät erilaisia ​​istream-toimintoja. Ensimmäisessä koodissa otamme minkä tahansa numeron käyttäjältä ja näytämme sen näytöllä. Toisessa käyttäjä syötti nimen ja tulosti sen näytölle.