C++ istream-funktioner

C Istream Funktioner



Termen 'ström' i C++ beskriver flödet av tecken mellan programtråden och i/o. C++-strömklasser behövs för att mata in och mata ut åtgärder på IO-enheter och filer. Dessa klasser är designade för att hantera programmets input och output och de har speciell funktionalitet.

Strömma klasshierarki

En C++-klass består av metoder som krävs för att hantera och styra data den innehåller.

float, doubles och classes är datatyper som liknar int. En unik variabel med en klass som datatyp kallas ett C++-objekt. De förspecificerade specialobjekten 'cin' och 'cout' har olika klasser som sina datatyper.







Data som skrivs till 'cout' eller läses från 'cin' är exempel på dataflöden in i eller ut ur program i C++. För närvarande överväger vi följande fyra klasser för denna:



Streama det
Alla syften kan tjänas av denna ingångsström. En illustration av en istream är cin.



Ostream
Det är en utgångsström med flera användningsområden. Ostreams kommer i form av cout och cin.





Om stream
Det är en ström av indatafiler.

Av ström
Det är en ström av utdatafiler. Arv är ett begrepp som används flitigt i objektorienterad programmering, som i C++, där vissa klasser tar på sig egenskaperna hos andra klasser som redan har skapats. Förfaderklasserna blir sedan specialiseringar av sig själva genom att nya funktioner tas med.



Om strömklass
En ifstream kan behandlas på samma sätt som en istream, vilket är vad den är.

Av strömklass
På samma sätt som ifstreams fungerar, men med output istället för input, är en ofstream en output filström. En ofstream används på samma sätt som cout efter att ha konstruerats, öppnats och verifierats för att inte ha några fel.

Ios klass
Från den här klassen härstammade alla strömklasser. In- och utströmmar är två olika typer.

Den definierar strömdelarna som är oberoende av strömmens ingångs- eller utgångsstatus i iOS-basen.

Till skillnad från de medlemmar som diskuteras i ios-basen, beskrivs de medlemmar som är beroende av mallparametrarna i denna del.

Ström (ingång)
På grund av iostream-bibliotekets komplexitet kommer vi inte att kunna täcka det helt och hållet i dessa lektioner. Vi kommer dock att lyfta fram de funktioner som används mest. I det här avsnittet kommer vi att titta på ingångsklassen från en mängd olika vinklar (istream).

Vi har lärt oss att extraktionsoperatören (>>) kommer att användas för att hämta data från en ingångsström.

STRÖM

I programmeringsspråket C++ hanteras indataströmmen av istream-klassen. Inmatningen läses och förstås som en serie tecken som använder dessa indataströmsobjekt. Inmatningen hanteras av cin.

Medlemsklasser

istream::sentry
En klass som utför många uppgifter och varje gång en inmatningsprocedure utförs. Dess förstörare är inte skyldig att utföra några åtgärder. Emellertid kan implementeringar utföra ytterligare start- eller rensningsuppgifter på strömmen som delas av alla inmatningsoperationer genom att skapa och förstöra vaktpostobjekt.

Funktioner

istream::gcount
Ger antalet tecken som erhölls från objektets senaste oformaterade inmatningsåtgärd. De oformaterade inmatningsprocedurerna – get, getline, ignore, peek, read, read some, putback och unget – ändrar värdet som returneras av den här funktionen. Tänk dock på att det inte extraherar några tecken genom att ringa peeks, putback eller unget. Som ett resultat kommer räkningen alltid att returnera 0.

istream::get
Den enda karaktären tar en karaktär ur strömmen. Tecknet sätts antingen som argumentets värde eller returneras (första signaturen) (andra signaturen).

C-sträng: Om det avgränsande tecknet finns, tas det inte bort från inmatningssekvensen, istället behålls det som följande tecken som ska hämtas från strömmen om det finns.

istream::getline
Tar bort tecken från strömmen som oformaterad indata och sparar dem som en c-sträng i variabeln 's' tills det extraherade tecknet blir det avgränsande tecknet eller 'n'-tecken har skrivits till 's'. Dessutom kommer metoden att sluta extrahera tecken om den når slutet av filen.

Internt skapar funktionen ett objekt innan inmatningssekvensen kommer åt. Slutligen dödar den objektet innan det returneras och extraherar tecken från dess associerade strömbuffertobjekt (förutsatt att allt är i sin ordning) som om den körde en av dess medlemsmetoder, sbumpc eller sgetc.

istream::ignorera
Tecken tas från inmatningssekvensen och kasseras en i taget tills antingen 'n' tecken har tagits ut eller en jämför lika med delim. Dessutom, om slutet av filen nås, stoppar funktionen teckenextraktion. Funktionen ställer in 'eofbit'-flaggan om den når denna punkt för tidigt (innan man extraherar n tecken eller upptäcker delim).

Innan man kommer åt inmatningssekvensen, konstruerar funktionen ett vaktobjekt internt (med noskipws kommer att vara sant). Slutligen dödar den vaktpostobjektet innan det återvänder, extraherar tecken från dess associerade strömbuffertobjekt (förutsatt att allt är i sin ordning) som om den körde en av dess medlemsmetoder: sbumpc eller sgetc.

istream::operatör >>
Extraktionsoperatören (>>) tillämpar denna operatör på en ingångsström. Den har för många medlemmar som funktion.

Aritmetisk typ

Tecken tas ut ur flödet och analyseras sekventiellt för att representera ett värde av rätt typ, som sedan sparas som värdet på 'val'. Innan du kommer åt inmatningssekvensen, konstruerar funktionen ett vaktobjekt internt (noskipws kommer att vara falskt). Om allt går bra, körs num get::get för att slutföra extraherings- och parsningsprocesserna samtidigt som strömmens interna tillståndsflaggor modifieras. Sentry-objektet förstörs till slut innan det lämnar.

Funktionen genererar internt ett vaktobjekt innan läser inmatningssekvensen, det anses utföra formaterad inmatning. Slutligen dödar den vaktpostobjektet innan det återvänder, extraherar tecken från dess associerade strömbuffertobjekt (förutsatt att allt är i sin ordning) som om den körde en av dess medlemsmetoder, sbumpc eller sgetc.

Manipulatorer

Pf (*detta) kallas, där pf kan vara en manipulator. Manipulatorer är rutiner skapade speciellt för att anropas när denna operatör anropas. Inmatningssekvensen påverkas inte av denna procedur och inga tecken extraheras.

istream::putback
Det återställda tecknet försöker flytta markören ner ett tecken i strömmen så att det sista tecknet som hämtas från strömmen återigen kan extraheras genom inmatningsoperationer.

Innan man kommer åt inmatningssekvensen, konstruerar funktionen ett vaktobjekt internt. Den anropar sedan sputbackc(c) på dess associerade strömbuffertobjekt (om bra). Sentry-objektet förstörs till slut innan det lämnar.

istream::read
Läs ett datablock:

'n'-tecknen tas från strömmen och lagras sedan i arrayen som pekas på av 's'. Denna funktion replikerar bara ett datablock utan att inspektera datainnehållet eller lägga till ett nolltecken i slutet.

Inom funktionen skapas först ett vaktobjekt innan inmatningssekvensen nås. Slutligen dödar den vaktpostobjektet innan det återvänder, extraherar tecken från dess associerade strömbuffertobjekt (förutsatt att allt är i sin ordning) som om den körde en av dess medlemsmetoder: sbumpc eller sgetc.

Antalet medlemmar som ringer kommer att returnera det totala antalet tecken som denna funktion har läst och lagrat korrekt.

istream::readsome
Denna funktion är beroende av det inre funktionen hos det specifika strömbuffertobjektet som är kopplat till strömmen, vars beteende till stor del är implementeringsdefinierat för standardklasser.

Inom funktionen skapas först ett vaktobjekt innan inmatningssekvensen nås. Sedan (om den lyckas) anropar den medlemsfunktionen i strömbuffertobjektets tillgänglighet för att avgöra hur många tecken som nu är tillgängliga innan den anropar 'sbumpc' för att extrahera upp till det antalet tecken (eller sgetc). Sentry-objektet förstörs till slut innan det lämnar.

istream::seekg
Positionen på inmatningsraden bestämmer var följande tecken kommer att hämtas från inmatningsströmmen. Innan inmatningssekvensen läses, konstruerar funktionen internt ett vaktobjekt. Sedan (om OK), gör den ett av två anrop till motsvarande strömbuffertobjekt: pubseekpos (1) eller pubseekoff (2), (om någon). Slutligen utplånar den vaktposten och avgår.

istream::sync
Rikta in ingångsbufferten:

Synkroniserar den länkade strömbuffertens kontrollerade ingångssekvens. Den specifika implementeringen av strömbuffertobjektet som är kopplat till strömmen avgör operationens detaljer.

istream::tellg
Få ingångssekvensens position:

Det ger den aktuella karaktärens position i inmatningsströmmen. Funktionen returnerar då -1. Om medlemmen misslyckas returneras den sant.

Den returnerar rdbuf()->pubseekoff om inte (0,cur,in). Sentry-objektet förstörs till slut innan det lämnar.

istream::unget
Ta bort tecken:

Försöker flytta markören ner ett tecken i strömmen så att det sista tecknet som hämtas från strömmen återigen kan extraheras med inmatningsoperationer.

Inte medlem

operatör >> (istream)
Extraheringsoperatorn (>>) tillhandahåller formaterad indata med denna åtgärd när den tillämpas på en indataström.

Ett tecken: Teckensekvensen tar ut nästa tecken och lagrar det som värdet på 'c'. Processen att extrahera tecken från är och lagra dem i s, som en c-sträng, stoppas (om bredden inte är noll) när ett blankstegstecken påträffas eller (bredd ()-1) tecken har extraherats.

Extrahering av rvalue: möjliggör extrahering från rvalue istream-objekt, vilket har samma resultat som extrahering från lvalues: Det anropar is>>Val.

Exempel 1

I det här fallet skulle vi undersöka hur vi kan få något värde från användaren och sedan visa det som resultat på skärmen.

#include
använder sig av namnutrymme std ;
int huvud ( )
{
int Nej ;
cout << 'Ange ett nummer ' ;
äter >> Nej ;
cout << 'Det angivna värdet är: ' << Nej << ' \n ' ;
}

Vi skulle inkludera rubrikfilen . Därefter använder vi namnutrymmet 'std' i standardnamnområdet. Vi skulle kalla funktionen main(). En variabel med namnet 'no' kommer att deklareras inom denna metod. Datatypen 'int' är representerad för denna variabel. Termen 'int' är förkortningen av ett heltal. Efteråt används uttalandet 'cout'. Detta kommando skriver ut raden.

Användaren kommer att mata in alla slumpmässiga värden efter att denna text har visats på skärmen. Då skulle uttalandet 'cin' ha använts. Detta kommando kräver att användaren anger värdet. Användarens angivna nummer skulle sparas i en variabel. Värdet som tillhandahålls av användaren skulle visas på skärmen med hjälp av 'cout'-kommandot.

Exempel 2

I det här fallet skulle vi se hur vi får ett namn från användaren och sedan visa det på skärmen som resultatet.

#inkludera
använder sig av namnutrymme std ;

int huvud ( )

{

röding namn [ 125 ] ;
cout << 'Ange ditt namn' << endl ;


äter >> ws ;

äter . getline ( namn, 125 ) ;

cout << namn << endl ;

lämna tillbaka 0 ;

}

Vi skulle inkludera rubrikfilen . Därefter kommer vi att använda standardnamnutrymmet som 'std'. Vi skulle anropa main()-funktionen. Inom denna metod kommer vi att deklarera en variabel. Denna variabel innehåller datatypen 'char'. Sedan används 'cout'-utlåtandet. Detta kommando visar texten 'Ange ditt namn' på skärmen. Efter att ha visat denna text på skärmen skulle användaren ange vilket namn som helst. Sedan skulle vi använda 'cin' uttalandet.

Detta kommando tar värdet från användaren. Det angivna namnet skulle lagras i en variabel 'ws'. Här skulle vi återigen använda kommandot 'cin'. Inom detta kommando tillämpas getline()-funktionen. Denna funktion innehåller parametern som inkluderar namnet som angetts av användaren och längden på namnet. Kommandot 'cout' kommer att användas för att visa namnet som användaren tillhandahåller. För att avsluta koden kommer kommandot 'retur 0' att användas.

Slutsats

Först pratade vi om vad som är C++ istream-funktioner. Sedan observerar vi flera funktioner och viktiga definitioner som nämns. I den här artikeln har vi kört olika koder som innehåller en mängd olika istream-funktioner. I den första koden tar vi valfritt nummer från användaren och visar det numret på skärmen. I den andra skrev användaren in namnet och skrev ut det namnet på skärmen.