C++ istream-funktioner

C Istream Funktioner



Udtrykket 'stream' i C++ beskriver strømmen af ​​tegn mellem programtråden og i/o. C++-streamklasser er nødvendige for at input og output handlinger på IO-enheder og filer. Disse klasser er designet til at styre programmets input og output, og de har særlig funktionalitet.

Stream klassehierarki

En C++-klasse består af metoder, der kræves til at styre og styre de data, den indeholder.

float, doubler og klasser er datatyper, der ligner int. En unik variabel med en klasse som sin datatype omtales som et C++ objekt. De forud specificerede specialobjekter 'cin' og 'cout' har forskellige klasser som deres datatyper.







Dataene skrevet til 'cout' eller læst fra 'cin' er eksempler på datastrømme ind eller ud af programmer i C++. I øjeblikket overvejer vi følgende fire klasser til denne:



Stream det
Ethvert formål kan tjenes af denne inputstrøm. En illustration af en istream er cin.



Ostream
Det er en outputstrøm med flere anvendelsesmuligheder. Ostreams kommer i form af cout og cin.





Hvis stream
Det er en strøm af inputfiler.

Af strøm
Det er en strøm af outputfiler. Arv er et begreb, der er meget brugt i objektorienteret programmering, såsom i C++, hvor nogle klasser overtager karakteristika fra andre klasser, der allerede er oprettet. Forfædreklasserne bliver derefter specialiseringer af sig selv gennem inddragelse af nye funktioner.



Hvis stream klasse
En ifstream kan behandles på samme måde som en istream, hvilket er hvad den er.

Af stream klasse
På samme måde som ifstreams fungerer, men med output i stedet for input, er en ofstream en output filstrøm. En ofstream bruges på samme måde som cout efter at være konstrueret, åbnet og verificeret til at have ingen fejl.

Ios klasse
Fra denne klasse nedstammede alle streamklasser. Input- og outputstrømme er to forskellige typer.

Det definerer streamdelene, der er uafhængige af streamens input- eller outputstatus i ios-basen.

I modsætning til de medlemmer, der diskuteres i ios-basen, er de medlemmer, der afhænger af skabelonparametrene, beskrevet i denne del.

Stream (input)
På grund af iostream-bibliotekets kompleksitet vil vi ikke være i stand til at dække det helt i disse lektioner. Vi vil dog fremhæve de funktioner, der bruges mest. I dette afsnit vil vi se på inputklassen fra en række forskellige vinkler (istream).

Vi har erfaret, at ekstraktionsoperatøren (>>) vil blive brugt til at hente data fra en inputstrøm.

STRØM

I programmeringssproget C++ håndteres inputstrømmen af ​​istream-klassen. Inputtet læses og forstås som en serie af tegn ved hjælp af disse inputstrømobjekter. Indtastningen varetages af cin.

Medlemsklasser

istream::sentry
En klasse, der udfører mange opgaver og hver gang udføres en indtastningsprocedure. Dens destruktor er ikke forpligtet til at udføre nogen handlinger. Implementeringer kan dog udføre yderligere opstarts- eller oprydningsopgaver på strømmen, der deles af alle inputoperationer ved at bruge oprettelse og ødelæggelse af vagtpostobjekter.

Funktioner

istream::gcount
Giver det tegnantal, der blev opnået fra objektets seneste uformaterede inputhandling. De uformaterede indtastningsprocedurer – get, getline, ignore, peek, read, read some, putback og unget – ændrer værdien, der returneres af denne funktion. Husk dog, at calling peeks, putback eller unget ikke udtrækker nogen tegn. Som et resultat vil optællingen altid returnere 0.

istream::get
Den enkelte karakter tager én karakter ud af strømmen. Tegnet indstilles enten som argumentets værdi eller returneres (første signatur) (anden signatur).

C-streng: Hvis afgrænsningstegnet er til stede, fjernes det ikke fra indtastningssekvensen i stedet beholdes som følgende tegn, der skal hentes fra strømmen, hvis det er til stede.

istream::getline
Fjerner tegn fra strømmen som uformateret input og gemmer dem som en c-streng i variablen 's', indtil det udtrukne tegn bliver det afgrænsende tegn, eller 'n' tegn er blevet skrevet til 's'. Derudover stopper metoden med at udpakke tegn, hvis den når slutningen af ​​filen.

Internt opretter funktionen et objekt før adgang til inputsekvensen. Til sidst dræber det objektet, før det returnerer, og udtrækker tegn fra dets tilknyttede strømbufferobjekt (forudsat at alt er i orden), som om det udfører en af ​​dets medlemsmetoder, sbumpc eller sgetc.

istream::ignorer
Tegn tages fra inputsekvensen og kasseres én ad gangen, indtil enten 'n' tegn er blevet fjernet, eller man sammenligner lig med delim. Derudover, hvis slutningen af ​​filen nås, standser funktionen tegnudtrækning. Funktionen indstiller 'eofbit'-flaget, hvis det når dette punkt for tidligt (før udtræk af n tegn eller opdager delim).

Før adgang til inputsekvensen, konstruerer funktionen et vagtobjekt internt (med noskipws vil være sandt). Til sidst dræber det vagtpostobjektet, før det returnerer, og udtrækker tegn fra dets tilknyttede strømbufferobjekt (forudsat at alt er i orden), som om det udfører en af ​​dets medlemsmetoder: sbumpc eller sgetc.

istream::operatør >>
Ekstraktionsoperatøren (>>) anvender denne operatør på en inputstrøm. Den har for mange medlemmer som en funktion.

Aritmetisk Type

Tegn tages ud af strømmen og parses sekventielt for at repræsentere en værdi af den rigtige type, som derefter gemmes som værdien af ​​'val'. Før adgang til inputsekvensen, konstruerer funktionen et vagtobjekt internt (noskipws vil være falsk). Hvis alt tjekker ud, kører det num get::get for at fuldføre udtræknings- og parsingprocesserne, mens strømmens interne tilstandsflag ændres. Sentry-objektet bliver i sidste ende ødelagt, før det forlader.

Funktionen genererer internt et vagtobjekt før læsning af inputsekvensen, det ses som at udføre formateret input. Til sidst dræber den vagtpostobjektet, før det returnerer, og udtrækker tegn fra dets tilknyttede strømbufferobjekt (forudsat at alt er i orden), som om det udfører en af ​​dets medlemsmetoder, sbumpc eller sgetc.

Manipulatorer

Pf (*dette) kaldes, hvor pf kunne være en manipulator. Manipulatorer er rutiner, der er skabt specielt til at blive kaldt, når denne operatør kaldes. Indtastningssekvensen er upåvirket af denne procedure, og ingen tegn udtrækkes.

istream::putback
Det gendannede tegn forsøger at flytte markøren et tegn ned i strømmen, så det sidst hentede tegn fra strømmen igen kan udtrækkes ved input-operationer.

Før adgang til inputsekvensen, konstruerer funktionen et vagtobjekt internt. Den kalder derefter sputbackc(c) på dets tilknyttede strømbufferobjekt (hvis godt). Sentry-objektet bliver i sidste ende ødelagt, før det forlader.

istream::læs
Læs en datablok:

'n'-tegnene tages fra strømmen og gemmes derefter i det array, der peges på af 's'. Denne funktion replikerer blot en blok af data uden at inspicere dataens indhold eller tilføje et nul-tegn i slutningen.

Inden for funktionen oprettes først et vagtobjekt, før der tilgås inputsekvensen. Til sidst dræber det vagtpostobjektet, før det returnerer, og udtrækker tegn fra dets tilknyttede strømbufferobjekt (forudsat at alt er i orden), som om det udfører en af ​​dets medlemsmetoder: sbumpc eller sgetc.

Opkaldende medlemsantal returnerer det samlede antal tegn, som denne funktion har læst og gemt korrekt.

istream::readsome
Denne funktion er afhængig af den indre funktion af det specifikke strømbufferobjekt, der er knyttet til strømmen, hvis adfærd stort set er implementeringsdefineret for standardklasser.

Inden for funktionen oprettes først et vagtobjekt, før der tilgås inputsekvensen. Derefter (hvis det lykkes), kalder det medlemsfunktionen i streambufferobjektets tilgængelighed for at bestemme, hvor mange tegn der nu er tilgængelige, før den kalder 'sbumpc' for at udtrække op til det antal tegn (eller sgetc). Sentry-objektet bliver i sidste ende ødelagt, før det forlader.

istream::seekg
Positionen i inputlinjen bestemmer, hvor følgende tegn vil blive trukket fra inputstrømmen. Inden indlæsningssekvensen aflæses, konstruerer funktionen internt et vagtobjekt. Derefter (hvis OK), foretager den et af to kald til det tilsvarende strømbufferobjekt: pubseekpos (1) eller pubseekoff (2), (hvis nogen). Til sidst udsletter den vagtposten og tager af sted.

istream::sync
Juster inputbufferen:

Synkroniserer den tilknyttede streambuffers kontrollerede inputsekvens. Den specifikke implementering af streambufferobjektet, der er forbundet med streamen, bestemmer operationens detaljer.

istream::tellg
Få inputsekvensens position:

Det giver den aktuelle karakters position i inputstrømmen. Funktionen returnerer derefter -1. Hvis medlemmet fejler, returnerer det sandt.

Det returnerer rdbuf()->pubseekoff, hvis ikke (0,cur,in). Sentry-objektet bliver i sidste ende ødelagt, før det forlader.

istream::unget
Fjern tegn:

Forsøger at flytte markøren et tegn ned i strømmen, så det sidste tegn, der er hentet fra strømmen, igen kan udtrækkes ved inputhandlinger.

Ikke-medlem

operatør >> (istream)
Udtræksoperatøren (>>) giver formateret input med denne handling, når den anvendes på en inputstrøm.

Et tegn: Tegnsekvensen tager det næste tegn ud af det og gemmer det som værdien af ​​'c'. Processen med at udtrække tegn fra er og gemme dem i s, som en c-streng, stopper (hvis bredden ikke er nul), når et mellemrumstegn stødes på, eller (bredde ()-1) tegn er blevet udtrukket.

Ekstraktion af rvalue: gør det muligt at udtrække fra rvalue istream-objekter, hvilket har samme resultat som udtræk fra lvalues: Det kalder is>>Val.

Eksempel 1

I dette tilfælde vil vi undersøge, hvordan vi kan opnå enhver værdi fra brugeren og derefter vise den som resultatet på skærmen.

#include
ved brug af navneområde std ;
int vigtigste ( )
{
int Ingen ;
cout << 'Indtast venligst et nummer' ;
spise >> Ingen ;
cout << 'Den indtastede værdi er: ' << Ingen << ' \n ' ;
}

Vi ville inkludere -headerfilen. Dernæst bruger vi navneområdet 'std' i standardnavneområdet. Vi ville kalde funktionen main(). En variabel med navnet 'nej' vil blive erklæret i denne metode. Datatypen 'int' er repræsenteret for denne variabel. Udtrykket 'int' er forkortelsen af ​​et heltal. Bagefter bruges 'cout'-udsagnet. Denne kommando udskriver linjen.

Brugeren vil indtaste enhver tilfældig værdi, efter at denne tekst er blevet vist på skærmen. Så ville 'cin'-erklæringen være blevet brugt. Denne kommando kræver, at brugeren angiver værdien. Brugerens indtastede nummer vil blive gemt i en variabel. Værdien angivet af brugeren vil blive vist på skærmen ved hjælp af 'cout'-kommandoen.

Eksempel 2

I dette tilfælde vil vi se, hvordan vi får et navn fra brugeren og derefter vise det på skærmen som resultatet.

#include
ved brug af navneområde std ;

int vigtigste ( )

{

char navn [ 125 ] ;
cout << 'Indtast dit navn' << endl ;


spise >> ws ;

spise . getline ( navn, 125 ) ;

cout << navn << endl ;

Vend tilbage 0 ;

}

Vi ville inkorporere header-filen . Dernæst vil vi bruge standardnavnerummet som 'std'. Vi ville påberåbe funktionen main(). Inden for denne metode vil vi erklære en variabel. Denne variabel indeholder datatypen 'char'. Så er 'cout'-erklæringen ansat. Denne kommando viser teksten 'Indtast dit navn' på skærmen. Efter at have vist denne tekst på skærmen, ville brugeren indtaste et hvilket som helst navn. Så ville vi bruge 'cin'-erklæringen.

Denne kommando tager værdien fra brugeren. Det angivne navn vil blive gemt i en variabel 'ws'. Her ville vi igen bruge 'cin'-kommandoen. Inden for denne kommando anvendes getline()-funktionen. Denne funktion indeholder parameteren, som inkluderer navnet indtastet af brugeren og længden af ​​navnet. Kommandoen 'cout' vil blive brugt til at vise det navn, som brugeren har angivet. For at afslutte koden, vil kommandoen 'retur 0' blive brugt.

Konklusion

Først talte vi om, hvad der er C++ istream-funktioner. Derefter observerer vi flere funktioner og vigtige definitioner nævnt. I denne artikel har vi kørt forskellige koder, der indeholder en række forskellige istream-funktioner. I den første kode tager vi et hvilket som helst nummer fra brugeren og viser det nummer på skærmen. I den anden indtastede brugeren navnet og udskrev dette navn på skærmen.