C++ istream-functies

C Istream Functies



De term 'stream' in C++ beschrijft de stroom van karakters tussen de programmathread en i/o. C++-stroomklassen zijn nodig voor het invoeren en uitvoeren van acties op IO-apparaten en bestanden. Deze klassen zijn ontworpen om de invoer en uitvoer van het programma te beheren en hebben een bepaalde functionaliteit.

Klassenhiërarchie streamen

Een C++-klasse bestaat uit methoden die nodig zijn voor het beheren en beheren van de gegevens die het bevat.

float, doubles en classes zijn gegevenstypen die lijken op int. Een unieke variabele met een klasse als gegevenstype wordt een C++-object genoemd. De vooraf gespecificeerde speciale objecten 'cin' en 'cout' hebben verschillende klassen als hun gegevenstype.







De gegevens die naar 'cout' worden geschreven of van 'cin' worden gelezen, zijn voorbeelden van gegevensstromen naar of uit programma's in C++. Momenteel overwegen we de volgende vier klassen voor deze:



Stream het
Elk doel kan worden gediend door deze invoerstroom. Een illustratie van een istream is cin.



Ostream
Het is een uitvoerstroom met verschillende toepassingen. Ostreams komen in de vorm van cout en cin.





Als streamen
Het is een stroom van invoerbestanden.

van stroom
Het is een stroom van uitvoerbestanden. Overerving is een begrip dat veel wordt gebruikt in objectgeoriënteerd programmeren, zoals in C++, waar sommige klassen de kenmerken aannemen van andere klassen die al zijn gemaakt. De voorouderklassen worden dan specialisaties van zichzelf door het opnemen van nieuwe functies.



Als stream klasse
Een ifstream kan op dezelfde manier worden behandeld als een istream, en dat is het ook.

Van stroom klasse
Op dezelfde manier als ifstreams functioneert, maar met uitvoer in plaats van invoer, is een ofstream een ​​uitvoerbestandsstroom. Een ofstream wordt op dezelfde manier gebruikt als cout nadat het is geconstrueerd, geopend en geverifieerd om geen fouten te bevatten.

Ios klasse
Van deze klasse stammen alle stroomklassen af. Invoer- en uitvoerstromen zijn twee verschillende typen.

Het definieert de streamdelen die onafhankelijk zijn van de invoer- of uitvoerstatus van de stream in de ios-basis.

In tegenstelling tot de leden die in de ios-base worden besproken, worden in dit deel de leden beschreven die afhankelijk zijn van de sjabloonparameters.

Stroom (invoer)
Vanwege de complexiteit van de iostream-bibliotheek kunnen we deze in deze lessen niet volledig behandelen. We zullen echter de functies benadrukken die het meest worden gebruikt. In deze sectie bekijken we de invoerklasse vanuit verschillende hoeken (istream).

We hebben geleerd dat de extractie-operator (>>) zal worden gebruikt om de gegevens van een invoerstroom te verkrijgen.

STROOM

In de programmeertaal C++ wordt de invoerstroom afgehandeld door de istream-klasse. De invoer wordt gelezen en begrepen als een reeks tekens met behulp van deze invoerstroomobjecten. De invoer wordt afgehandeld door de cin.

Ledenklassen

istream::sentry
Een klas die veel taken uitvoert en elke keer dat er een invoerprocedure wordt uitgevoerd. De destructor hoeft geen acties uit te voeren. Implementaties kunnen echter extra opstart- of opruimtaken uitvoeren op de stream die wordt gedeeld door alle invoerbewerkingen door gebruik te maken van het maken en vernietigen van schildwachtobjecten.

Functies

istream::gcount
Geeft het aantal tekens dat is verkregen uit de meest recente niet-opgemaakte invoeractie van het object. De niet-geformatteerde invoerprocedures - get, getline, negeer, peek, read, read some, putback en unget - veranderen de waarde die door deze functie wordt geretourneerd. Houd er echter rekening mee dat het aanroepen van peeks, putback of unget geen tekens extraheert. Als resultaat zal de telling altijd 0 opleveren.

istream::get
Het enkele teken haalt één teken uit de stream. Het teken wordt ofwel ingesteld als de waarde van het argument of geretourneerd (eerste handtekening) (tweede handtekening).

C-tekenreeks: als het begrenzende teken aanwezig is, wordt het niet verwijderd uit de invoerreeks, maar behouden als het volgende teken dat uit de stream moet worden opgehaald als het aanwezig is.

istream::getline
Verwijdert tekens uit de stream als niet-geformatteerde invoer en slaat ze op als een c-tekenreeks in de variabele 's' totdat het geëxtraheerde teken het scheidingsteken wordt of 'n'-tekens zijn geschreven naar 's'. Bovendien stopt de methode met het extraheren van tekens als het einde van het bestand is bereikt.

Intern maakt de functie een object voordat de invoerreeks wordt geopend. Ten slotte doodt het het object voordat het terugkeert, waarbij tekens worden geëxtraheerd uit het bijbehorende streambuffer-object (ervan uitgaande dat alles in orde is) alsof het een van zijn lidmethoden, sbumpc of sgetc, uitvoert.

istream::negeren
Tekens worden uit de invoerreeks gehaald en één voor één weggegooid totdat ofwel 'n' tekens zijn verwijderd of één vergelijkbaar is met de delim. Bovendien, als het einde van het bestand wordt bereikt, stopt de functie het extraheren van tekens. De functie stelt de vlag 'eofbit' in als deze dit punt te vroeg bereikt (voordat n tekens worden geëxtraheerd of delim wordt ontdekt).

Voordat de invoerreeks wordt geopend, construeert de functie intern een schildwachtobject (waarbij noskipws waar is). Ten slotte doodt het het sentry-object voordat het terugkeert, waarbij tekens worden geëxtraheerd uit het bijbehorende streambuffer-object (ervan uitgaande dat alles in orde is) alsof het een van zijn lidmethoden uitvoert: sbumpc of sgetc.

istream::operator>>
De extractie-operator (>>) past deze operator toe op een invoerstroom. Het heeft te veel leden als functie.

rekenkundig type

Tekens worden uit de stream gehaald en opeenvolgend geparseerd om een ​​waarde van het juiste type weer te geven, die vervolgens wordt opgeslagen als de waarde 'val'. Alvorens toegang te krijgen tot de invoerreeks, construeert de functie intern een schildwachtobject (noskipws zal onwaar zijn). Als alles goed verloopt, wordt num get::get uitgevoerd om de extractie- en parseerprocessen te voltooien terwijl de interne statusvlaggen van de stream worden gewijzigd. Het schildwachtobject wordt uiteindelijk vernietigd voordat het vertrekt.

De functie genereert intern een schildwachtobject voordat de invoerreeks wordt gelezen, het wordt gezien als het uitvoeren van geformatteerde invoer. Ten slotte doodt het het sentry-object voordat het terugkeert, waarbij tekens worden geëxtraheerd uit het bijbehorende streambuffer-object (ervan uitgaande dat alles in orde is) alsof het een van zijn lidmethoden, sbumpc of sgetc, uitvoert.

Manipulatoren

De pf (*this) wordt genoemd, waarbij pf een manipulator zou kunnen zijn. Manipulatoren zijn routines die speciaal zijn gemaakt om te worden aangeroepen wanneer deze operator wordt aangeroepen. De invoervolgorde wordt niet beïnvloed door deze procedure en er worden geen tekens geëxtraheerd.

istream::putback
Het herstelde teken probeert de cursor één teken naar beneden in de stream te verplaatsen, zodat het laatste teken dat uit de stream is opgehaald opnieuw kan worden geëxtraheerd door invoerbewerkingen.

Alvorens toegang te krijgen tot de invoerreeks, construeert de functie intern een schildwachtobject. Vervolgens roept het sputbackc(c) aan op het bijbehorende streambufferobject (indien goed). Het schildwachtobject wordt uiteindelijk vernietigd voordat het vertrekt.

istream::lees
Een datablok lezen:

De 'n'-tekens worden uit de stream gehaald en vervolgens opgeslagen in de array waarnaar wordt verwezen door 's'. Deze functie repliceert slechts een gegevensblok zonder de inhoud van de gegevens te inspecteren of aan het einde een null-teken toe te voegen.

Binnen de functie wordt eerst een schildwachtobject gemaakt voordat de invoerreeks wordt geopend. Ten slotte doodt het het sentry-object voordat het terugkeert, waarbij tekens worden geëxtraheerd uit het bijbehorende streambuffer-object (ervan uitgaande dat alles in orde is) alsof het een van zijn lidmethoden uitvoert: sbumpc of sgetc.

Het aantal oproepende leden geeft het totale aantal tekens terug dat deze functie correct heeft gelezen en opgeslagen.

istream::readsome
Deze functie is afhankelijk van de interne werking van het specifieke streambufferobject dat aan de stream is gekoppeld, waarvan het gedrag grotendeels door de implementatie is gedefinieerd voor standaardklassen.

Binnen de functie wordt eerst een schildwachtobject gemaakt voordat de invoerreeks wordt geopend. Vervolgens (indien succesvol), roept het de lidfunctie aan in de beschikbaarheid van het streambufferobject om te bepalen hoeveel tekens er nu beschikbaar zijn voordat 'sbumpc' wordt aangeroepen om tot dat aantal tekens (of sgetc) te extraheren. Het schildwachtobject wordt uiteindelijk vernietigd voordat het vertrekt.

istream::seekg
De positie in de invoerregel bepaalt waar het volgende teken uit de invoerstroom wordt gehaald. Voorafgaand aan het lezen van de invoerreeks, construeert de functie intern een schildwachtobject. Vervolgens (indien OK), doet het een van de twee aanroepen naar het corresponderende streambufferobject: pubseekpos (1) of pubseekoff (2), (indien aanwezig). Ten slotte vernietigt het het schildwachtitem en vertrekt.

istream::synchronisatie
Lijn de invoerbuffer uit:

Brengt de gecontroleerde invoervolgorde van de gekoppelde streambuffer synchroon. De specifieke implementatie van het streambufferobject dat met de stream is verbonden, bepaalt de bijzonderheden van de bewerking.

istream::tellg
Verkrijg de positie van de invoerreeks:

Het geeft de positie van het huidige teken in de invoerstroom. De functie retourneert dan -1. Als het lid faalt, wordt true geretourneerd.

Het retourneert rdbuf()->pubseekoff indien niet (0,cur,in). Het schildwachtobject wordt uiteindelijk vernietigd voordat het vertrekt.

istream::unget
Teken verwijderen:

Probeert de cursor één teken naar beneden in de stream te verplaatsen, zodat het laatste teken dat uit de stream is opgehaald opnieuw kan worden geëxtraheerd door invoerbewerkingen.

Geen lid

operator>> (istream)
De extractie-operator (>>) levert geformatteerde invoer met deze actie wanneer deze wordt toegepast op een invoerstroom.

Eén teken: de tekenreeks haalt het volgende teken eruit en slaat het op als de waarde van 'c'. Het proces van het extraheren van karakters uit is en het opslaan in s, als een c-string, stopt (als de breedte niet nul is) wanneer een spatie wordt aangetroffen of (breedte ()-1) karakters zijn geëxtraheerd.

Extractie van rvalues: maakt het extraheren van rvalue istream-objecten mogelijk, wat hetzelfde resultaat heeft als het extraheren van lvalues: het roept is>>Val aan.

voorbeeld 1

In dit geval zouden we onderzoeken hoe we waarde van de gebruiker kunnen verkrijgen en deze vervolgens als resultaat op het scherm weergeven.

#include
gebruik makend van naamruimte soa ;
int hoofd ( )
{
int Nee ;
cout << 'Voer alstublieft een nummer in ' ;
aan het eten >> Nee ;
cout << 'De ingevoerde waarde is: ' << Nee << ' \n ' ;
}

We zouden het -headerbestand opnemen. Vervolgens gebruiken we de naamruimte 'std' in de standaard naamruimte. We zouden de functie main() aanroepen. Binnen deze methode wordt een variabele met de naam 'no' gedeclareerd. Het gegevenstype 'int' wordt weergegeven voor deze variabele. De term 'int' is de afkorting van een geheel getal. Daarna wordt de 'cout'-verklaring gebruikt. Met deze opdracht wordt de regel afgedrukt.

De gebruiker voert een willekeurige waarde in nadat deze tekst op het scherm is weergegeven. Dan zou de 'cin' -verklaring zijn gebruikt. Deze opdracht vereist dat de gebruiker de waarde aangeeft. Het ingevoerde nummer van de gebruiker wordt opgeslagen in een variabele. De waarde die door de gebruiker wordt opgegeven, wordt op het scherm weergegeven met de opdracht 'cout'.

Voorbeeld 2

In dit geval zouden we zien hoe we een naam van de gebruiker krijgen en deze vervolgens als resultaat op het scherm tonen.

#include
gebruik makend van naamruimte soa ;

int hoofd ( )

{

char naam [ 125 ] ;
cout << 'Vul uw naam in' << eindel ;


aan het eten >> ws ;

aan het eten . getline ( naam, 125 ) ;

cout << naam << eindel ;

opbrengst 0 ;

}

We zouden het headerbestand opnemen. Vervolgens gebruiken we de standaard naamruimte als 'std'. We zouden de functie main() aanroepen. Binnen deze methode declareren we een variabele. Deze variabele bevat het gegevenstype 'char'. Dan wordt de 'cout'-verklaring gebruikt. Dit commando toont de tekst 'Voer uw naam in' op het scherm. Nadat deze tekst op het scherm is weergegeven, voert de gebruiker een willekeurige naam in. Dan zouden we de 'cin'-verklaring gebruiken.

Deze opdracht neemt de waarde van de gebruiker. De opgegeven naam zou worden opgeslagen in een variabele 'ws'. Hier zouden we opnieuw het commando 'cin' gebruiken. Binnen deze opdracht wordt de functie getline() toegepast. Deze functie bevat de parameter die de naam bevat die door de gebruiker is ingevoerd en de lengte van de naam. Het 'cout'-commando wordt gebruikt om de naam weer te geven die door de gebruiker is opgegeven. Om de code te beëindigen, wordt het commando 'return 0' gebruikt.

Conclusie

Eerst hebben we het gehad over wat C ++ istream-functies zijn. Vervolgens nemen we een aantal genoemde functies en belangrijke definities waar. In dit artikel hebben we verschillende codes uitgevoerd die verschillende istream-functies bevatten. In de eerste code nemen we een willekeurig nummer van de gebruiker en geven dat nummer weer op het scherm. In de tweede heeft de gebruiker de naam ingevoerd en die naam op het scherm afgedrukt.