Administrere konsollen med iostream -klassene i C ++

Managing Console With Iostream Classes C



I databehandling er konsollen datatastaturet og dataskjermen. Tidligere ble utdata sendt direkte til skjermbildet og ikke til et vindu som ble vist på skjermen. For den vanlige datamaskinbrukeren bruker applikasjoner i dag ikke skjermen eksplisitt. Disse programmene bruker vinduer som vises på skjermen. Dataprogrammereren trenger imidlertid fortsatt å bruke skjermen. Selv om programmereren fremdeles trenger å bruke skjermen, tillater ikke operativsystemet ham å gjøre det. Operativsystemet gir et vindu som simulerer skjermen. I Windows -operativsystemet kalles dette vinduet kommandoprompt. I Linux -operativsystemet og dets varianter kalles dette vinduet terminalen.

Det forventes at leseren allerede vet hvordan man bruker kommandoprompten eller terminalen. Denne artikkelen forklarer hvordan du leser tegn og strenger fra tastaturet og sender tegn og strenger til terminalen (eller ledeteksten). Hver C ++ programmerer trenger å vite i denne artikkelen.





For å få inngang fra tastaturet og utgang til terminalen, må programmet begynne med:



#inkludere
ved hjelp av navneområdetimer;

Artikkelinnhold

Smale strømobjekter i standard iostream

Iostream -klassen, standardobjektene, cout, cin, cerr og clog, er instantiert og allerede i standardbiblioteket. Programmereren bruker dem bare uten å sette dem i gang igjen.



koste

Følgende setning i hovedfunksjonen () sender teksten: This is output. til terminalen:





koste << 'Dette er utdata.';

cout er et output iostream -objekt i standardbiblioteket, som allerede er instansert.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

Med uttalelsen ovenfor vises den ledige ledeteksten på nytt til høyre for utdatasetningen. Det går ikke til neste linje. endl på slutten av følgende setning vil tvinge det som skrives ut av skjermen til neste linje:



koste << 'Dette er utdata.' <<endl;

endl er en forhåndsdefinert variabel. Skjerminnhold kan også tvinges til neste linje med:

koste << 'Dette er utdata.' << ' n';

Ved bruk av ‘ n’ kan det hende at alle tekstlinjene fortsatt ikke vises på skjermen umiddelbart. endl skyller hele tekstlinjen til skjermen.

Merk: en streng som sendes til cout er i doble anførselstegn, mens et tegn som sendes er i enkle anførselstegn. En serie med strenger og tegn kan sendes i en uttalelse, som hver går foran<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin er standard iostream -inngangsobjekt, allerede installert og tilgjengelig i standardbiblioteket. Vurder følgende kodesegment i hovedfunksjonen ():

røyetekst[femti];
koste << 'Skriv inn et ord og trykk Enter:' tekst;
koste <<tekst<<endl;

Den første setningen erklærer en tom matrise på 50 tegn. Den andre setningen instruerer brukeren om å skrive inn et ord på den neste skjermlinjen og trykke Enter -tasten. Legg merke til bruken av 'endl' som tvinger brukeren til å skrive inn tekst på neste linje på skjermen. Når brukeren skriver tekst, ekko den angitte teksten til skjermen mens den går inn i cin -objektet. Etter å ha trykket Enter, blir den tredje setningen i kodesegmentet utført. Denne tredje setningen sender den angitte teksten til variabelen txt. Teksten som er angitt, bør ikke være lengre enn 50 tegn i dette tilfellet. Legg merke til bruken av ekstraksjonsoperatøren, >>. Den siste setningen viser den angitte teksten på skjermen.

cin kan ta mer enn ett ord fra tastaturet, atskilt med mellomrom. Disse ordene må trekkes ut i forskjellige variabler. Følgende kodesegment illustrerer dette:

røyetekst[tjue];
intden;
flyteft;
koste << 'Skriv inn 3 verdier og trykk Enter:' tekst>>den>>ft;
koste <<tekst<< '' <<den<< '' <<ft<<endl;

Legg merke til utsagnet:

gin >>tekst>>den>>ft;

Det første ordet trekkes ut til txt, det neste ved siden av det, og det siste til ft. Hvis inngangen var,

en25 3.6

da ville utgangen av kodesegmentet være,

en25 3.6

cerr

Følgende program har en feil:

#inkludere
ved hjelp av navneområdetimer;

inthoved-()
{
i minInt;

komme tilbake 0;
}

Den første setningen i main () er ikke korrekt. Hvis navnet på filen med koden er temp.cc og den resulterende kjørbare filen skal kalles temp, vil følgende g ++ kommando sende kompilatorfeilmeldingen til filen, error.txt:

g++ -o temp temp.DC 2>feil.tekst

Hvis filen error.txt ikke eksisterer, vil den bli opprettet. Legg merke til del 2> error.txt av kommandoen g ++.

Skjermen er standard utdatamål, og det er også standard feildestinasjon. Hvis 2> error.txt utelates fra kommandoen g ++, vil kompilatorfeilmeldingen bli sendt til standard feilmål, som fremdeles er skjermen (skjermen).

Strømobjektet som representerer standard utdatamål er cout. Strømobjektet som representerer standard feilmål er cerr. En programkjøringsfeil kan sendes til skjermen som følger:

cerr << 'Feilmeldingen!' << ' n';

tette

En applikasjon tar forskjellige innganger til forskjellige tider. Alle inngangene kan vises på nytt på skjermen. Alle inngangene kan lagres i en fil. Dette er logging. Standard loggdestinasjon er skjermen. Standard loggstrømobjekt er en tette. Følgende kode vil vise inndatateksten på skjermen på nytt:

røyetekst[femti];
koste<<'Skriv inn tekst og trykk Enter:'tekst;
tette<<tekst<<endl;

Hvis inndatateksten er 'input_text', vil tette igjen vise 'input_text' til skjermen.

I praksis blir logging vanligvis omdirigert til en fil. Følgende program illustrerer dette:

#inkludere
ved hjelp av navneområdetimer;

inthoved-()
{
freopen( 'log.txt','i',stdout);

koste << 'input_text' <<endl;
}

Legg merke til bruken av funksjonen, freopen (), og dens argumenter. Det første argumentet er navnet på loggfilen. Hvis filen ikke eksisterer, vil den bli opprettet. Det andre argumentet er 'w' for 'skrive'. Det tredje argumentet er stdout for standard-output. Den andre setningen i hovedfunksjonen () bruker cout til å sende loggteksten til filen. Merk: Den faktiske inngangskoden har ikke blitt vist i dette programmet.

Hente tegn og strenger fra tastaturet

Mens brukeren skriver input, blir tegnene sendt til inndatastrømbufferen og vist på skjermen. Når brukeren trykker på Enter -tasten, er alle tegnene i bufferen; markøren går også til begynnelsen av neste linje nedenfor, på skjermen. Programmet fortsetter deretter til neste programuttalelse, etter uttalelsen om lesing av inndata.

Cin -objektet har metoder, som denne delen er opptatt av.

Lese den første karakteren

get (char_type & c):
Følgende kodesegment viser hvordan du leser det første tegnet, fra inndatastrømbufferen:

røyekap;
koste << 'Inngangstekst:' <<endl;
gin.(kap);
koste <<kap<<endl;

Den første setningen erklærer et tegn uten tildeling. Den andre setningen forteller brukeren å legge inn et tegn. Når brukeren skriver inn tegn og trykker på Enter -tasten, kopierer den tredje setningen tegnet fra inndatastrømbufferen til variabelen, kap.

Selv om brukeren skrev inn mer enn ett tegn, ville det første tegnet bli tatt av kodesegmentet.

få():
get () uten argument, returnerer desimal ASCII -koden. Vurder følgende kodesegment:

koste << 'Inngangstekst:' <<endl;
koste << gin.() <<endl;

Hvis inngangen er 'asdfg', vil 97 bli returnert, som er desimal ASCII -koden for 'a'.

get (char_type* s, strømstørrelse n)

Etter at brukeren har skrevet inn en setning og trykket på Enter -tasten, kan et antall tegn som begynner fra den første, trekkes ut fra cin stream -bufferen. Følgende kode kan brukes:

røyes[10];
koste << 'Inngangstekst:' <<endl;
gin.(str,10);
koste <<s<<endl;

Hvis inngangen er 'flotte mennesker', vil utgangen være 'flott peo', på 9 tegn og ikke 10. Strengen NUL -tegnet ( 0) inntar den tiende posisjonen i get -argumentet. Så for å ha 9 tegn i str, må lagringsstørrelsen være minst 10, og get () -argumentet må være 11. Hvis hele inndatalinjen er ønsket, må strenglagringsnummeret være minst tallet antall tegn som er skrevet, pluss 1. Så hvis 12 tegn er skrevet for hele linjen, bør tallet være 13 for strengen (str) lagringsstørrelse og 13 for get () -argumentet. Vær oppmerksom på at ett mellomrom regnes som ett tegn.

get (char_type* s, streams n, char_type delim)
Det er mulig å trekke ut en understreng, avgrenset til høyre, ved den første forekomsten av et bestemt tegn, eller med delstrengens strømstørrelse, som noen gang kommer først. Hvis inndatateksten til følgende kode er flotte mennesker, vil flott bli trukket ut:

røyes[30];
koste << 'Inngangstekst:' <<endl;
gin.(str,6,'eller');
koste <<s<<endl;

Den sjette posisjonen fra begynnelsen er romtegnet, og den avgrenser den ekstraherte delstrengen utelukkende. Den sjette posisjonen kommer først før den eneste karakteren, 'o'. Vær oppmerksom på at lagringsstørrelsen for str kan være så høy som mulig.

Hvis inndatateksten til følgende kode er flotte mennesker, vil gr bli trukket ut:

røyes[30];
koste << 'Inngangstekst:' <<endl;
gin.(str,10,'Og');
koste <<s<<endl;

Den første forekomsten av 'e' kommer først før den tiende posisjonen.

Få alle tegnene i en linje

Etter å ha trykket på Enter -tasten, kan alle tegnene som er skrevet inn i linjen, hentes som vist i følgende kode:

koste << 'Inngangstekst:' <<endl;
samtidig som (1) {
røyekap= (røye)gin.();
koste <<kap;
hvis (kap== ' n')
gå i stykker;
}

Castingen med (char) konverterer hvert desimaltall til det tilsvarende ASCII -tegnet.

kikk ()

Get () medlemsfunksjonene leser ikke bare det neste tegnet; de fjerner det fra strømbufferen. Imidlertid kan peek () medlemsfunksjonen enkelt lese det neste tegnet (fra det første) uten å fjerne det fra bufferen. I den følgende koden leses hvert tegn først med peek () -funksjonen før det blir fjernet, av get () -funksjonen. Alt som skjer etter at brukeren trykker på Enter -tasten:

koste << 'Inngangstekst:' <<endl;
samtidig som (1) {
røyekap= (røye)gin.kikke();
koste <<kap;
gin.();
hvis (kap== ' n')
gå i stykker;
}

Hvis de neste tegnene ikke ble fjernet av get (), ville titt () bare være å lese det første tegnet, og sløyfen vil gjenta seg på ubestemt tid.

Visning og sletting av tegn før du trykker på Enter

Legg merke til at med cin -objektet må du trykke Enter -tasten før det blir handling. Vel, det er mulig at tegn vises mens de skrives og slettes før du trykker på Enter -tasten. Det betyr imidlertid grensesnitt med operativsystemet. Operativsystemer er forskjellige. Så dette betyr forskjellig koding for forskjellige operativsystemer. Så dette emnet fortjener en helt annen opplæring - se senere.

Sende tegn og strenger til skjermen

Cout -objektet er et output -strømobjekt, allerede installert og tilstede i standardbiblioteket C ++. cout er hovedobjektet som brukes til å sende tegn og strenger til skjermen. Dette gjøres med innsettingsoperatoren,<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

Uttrykk som resulterer i skalarer kan være argumenter for innsettingsoperatoren. Operatøren konverterer skalaren til tekst og plasserer teksten i cout -objektstrømmen. Når tekst sendes til cout -objektet, vises det normalt på skjermen (skjermen). Noen ganger kan det imidlertid hende at det ikke vises umiddelbart. For å tvinge inn tekst på skjermen, sett inn spesialverdien, endl, like etter at du har satt inn teksten. Dette vil føre til at teksten skylles til skjermen, og en ny linje vil bli lagt til. Merk: ‘ n’ legger ganske enkelt til en ny linje, men skyller ikke tekst til skjermen.

Følgende program viser hvordan du skriver ut verdiene for int, float og vanlig tekst på skjermen:

#inkludere
ved hjelp av navneområdetimer;

inthoved-()
{
intden= 5;
flyteft= 63,5;
koste << 'The' <<den<< 'varer koster $' <<ft<< 'USA.' <<endl;

komme tilbake 0;
}

Utgangen er:

De5varer koster $63,5OSS.

Følgende program viser hvordan strengen til et objekt som er instansert fra en klasse skrives ut:

#inkludere
ved hjelp av navneområdetimer;

strukturSt.{
røyes[elleve] = 'noen ord';
}obj;

inthoved-()
{
koste <<obj.s << ' n';

komme tilbake 0;
}

Utgangen er 'noen ord'.

Argumenter for et C ++ - program

Programgjennomføring starter fra hovedfunksjonen (). Hovedfunksjonen () har faktisk to valgfrie parametere. Syntaksen til hovedfunksjonen () med de valgfrie parameterne er:

inthoved-(intargc,røye *argv[argc])
{

komme tilbake 0;
}

Anta at navnet på den kjørbare C ++ - filen er temp. Anta at argumentene som programmet trenger fra sitt miljø (operativsystem), skrevet av brukeren, er,

artikler3bokpenn'stort hus'

Det er 5 argumenter her: artikler, 3, bok, penn og stort hus

Hver er tekst. Et nummerert argument til et program er tekst. Med andre ord er hvert argument en streng. stort hus står i sitater fordi det er en setning. Terminalkommandoen for å kjøre dette programmet vil være:

./midlertidige artikler3bokpenn'stort hus'

Forutsatt at filtemp er i hjemmekatalogen. Vær oppmerksom på at mellomrom og ikke komma skiller argumentene.

Nå, i syntaks for hovedfunksjonen (), er argc antall argumenter for programmet, pluss 1. I dette tilfellet er det 5 argumenter for programmet. Så, argc er 6. I syntaksen er argv [argc] en rekke pekere til strenger. Den første verdien for denne matrisen ved argv [0] er gitt av kompilatoren. Det er en peker til navnet på programfilen. Resten av verdiene er tips til programargumentene i brukerens rekkefølge som er skrevet inn. Størrelsen på denne matrisen er argc. I dette tilfellet er størrelsen 1 + 5 = 6.

Anta at følgende program ved samlingen heter temp:

#inkludere
ved hjelp av navneområdetimer;

inthoved-(intargc,røye**argv)
{

koste <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

komme tilbake 0;
}

Legg merke til her at matrisen 'char*argv [argc]' har blitt erklært som 'char ** argv'.

Hvis dette programmet kjøres med terminalkommandoen,

./midlertidige artikler3bokpenn'stort hus'

da ville utgangen være:

./temp, artikler,3, bok, penn, stort hus

Vær oppmerksom på at katalogbanen er inkludert i navnet på den kjørbare filen.

Vær også oppmerksom på at under kjøring av programmet (kalling av programmet), har verdien for argc ikke blitt sendt.

Konklusjon

Iostream -klassen har fire viktige objekter som er cout, cin, cerr og clog. cin er et input -objekt, mens resten er output -objekter. Mens et program kjører, er input til programmet forskjellig fra når programmet skal begynne å kjøre. Når et program begynner å kjøre, blir input til programmet forbundet med kommandoen for å kjøre programmet, atskilt med mellomrom.