Administration af konsollen med iostream -klasserne i C ++

Managing Console With Iostream Classes C



I computing er konsollen computertastaturet og computerskærmen. Tidligere blev output sendt direkte til skærmen og ikke til et vindue, der blev vist på skærmen. For den almindelige computerbruger bruger applikationer i dag ikke skærmen eksplicit. Disse applikationer bruger vinduer, der vises på skærmen. Computerprogrammereren skal dog stadig bruge skærmen. Selvom programmøren stadig skal bruge skærmen, tillader operativsystemet ham ikke at gøre det. Operativsystemet giver et vindue, der simulerer skærmen. I Windows -operativsystemet kaldes dette vindue kommandoprompt. I Linux -operativsystemet og dets varianter kaldes dette vindue for terminalen.

Det forventes, at læseren allerede ved, hvordan man bruger kommandoprompten eller terminalen. Denne artikel forklarer, hvordan du læser tegn og strenge fra tastaturet og sender tegn og strenge til terminalen (eller kommandoprompt). Hver C ++ programmerer skal vide det i denne artikel.





For at få input fra tastaturet og output til terminalen skal programmet begynde med:



#omfatte
ved brug af navnerumtimer;

Artikelindhold

Smalle strømobjekter i standard iostream

Iostream -klassen, standardobjekterne, cout, cin, cerr og clog, er blevet instantieret og allerede i standardbiblioteket. Programmereren bruger dem bare uden at instantiere dem igen.



koste

Følgende sætning i hovedfunktionen () sender teksten, Dette er output. til terminalen:





koste << 'Dette er output.';

cout er et output iostream -objekt i standardbiblioteket, der allerede er instantieret.<< 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 ovenstående erklæring vises den kommando, der vises igen, til højre for outputfrasen. Det går ikke til den næste linje. endl i slutningen af ​​følgende erklæring vil tvinge det, der skrives ud af skærmen, til den næste linje:



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

endl er en foruddefineret variabel. Skærmindhold kan også tvinges til den næste linje med:

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

Ved brug af ‘ n’ vises alle tekstlinjer muligvis stadig ikke på skærmen med det samme. endl skyller hele tekstlinjen til skærmen.

Bemærk: en streng sendt til cout er i dobbelte anførselstegn, mens et tegn, der sendes, er i enkelte anførselstegn. En række strenge og tegn kan sendes i en erklæring, hver efterfulgt af<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin er standard iostream inputobjekt, der allerede er instanseret og tilgængeligt i standardbiblioteket. Overvej følgende kodesegment i hovedfunktionen ():

forkælelsetxt[halvtreds];
koste << 'Indtast et ord, og tryk på Enter:' txt;
koste <<txt<<endl;

Den første erklæring erklærer et tomt array på 50 tegn. Den anden sætning instruerer brugeren i at indtaste et ord på den næste skærmlinje og trykke på Enter -tasten. Bemærk brugen af ​​'endl', der tvinger brugeren til at indtaste tekst i den næste linje på skærmen. Når brugeren skriver tekst, ekko den indtastede tekst til skærmen, mens den går ind i cin -objektet. Efter at have trykket på Enter, udføres den tredje sætning i kodesegmentet. Denne tredje sætning sender den indtastede tekst til variablen, txt. Den indtastede tekst må ikke være længere end 50 tegn i dette tilfælde. Bemærk brugen af ​​ekstraktionsoperatøren, >>. Den sidste sætning viser den indtastede tekst på skærmen.

cin kan tage mere end ét ord fra tastaturet adskilt af mellemrum. Disse ord skal ekstraheres til forskellige variabler. Følgende kodesegment illustrerer dette:

forkælelsetxt[tyve];
intdet;
flydeft;
koste << 'Indtast 3 værdier, og tryk på Enter:' txt>>det>>ft;
koste <<txt<< '' <<det<< '' <<ft<<endl;

Bemærk udsagnet:

gin >>txt>>det>>ft;

Det første ord udtrækkes til txt, det næste ved siden af ​​det, og det sidste til ft. Hvis input var,

en25 3.6

så ville output fra kodesegmentet være,

en25 3.6

cerr

Følgende program har en fejl:

#omfatte
ved brug af navnerumtimer;

intvigtigste()
{
i minInt;

Vend tilbage 0;
}

Den første erklæring i main () er ikke korrekt. Hvis navnet på filen med koden er temp.cc, og den resulterende eksekverbare fil skal kaldes temp, sender følgende g ++ kommando kompilatorfejlmeddelelsen til filen, error.txt:

g++ -o temp temp.DC 2>fejl.txt

Hvis filen error.txt ikke findes, ville den blive oprettet. Bemærk del 2> error.txt af kommandoen g ++.

Skærmen er standard outputdestination, og det er også standardfejldestinationen. Hvis 2> error.txt udelades fra kommandoen g ++, sendes compiler -fejlmeddelelsen til standardfejldestinationen, som stadig er skærmen (skærmen).

Streamobjektet, der repræsenterer standardoutputdestinationen, er cout. Strømobjektet, der repræsenterer standardfejldestinationen, er cerr. En programkørselsfejl kan sendes til skærmen som følger:

cerr << 'Fejlmeddelelsen!' << ' n';

tilstoppe

En applikation tager forskellige input på forskellige tidspunkter. Alle input kan vises igen på skærmen. Alle input kan gemmes i en fil. Dette er logning. Standard logdestination er skærmen. Standard logningsstrømobjektet er en træsko. Følgende kode viser inputteksten til skærmen igen:

forkælelsetxt[halvtreds];
koste<<'Indtast tekst, og tryk på Enter:'txt;
tilstoppe<<txt<<endl;

Hvis inputteksten er 'input_text', vil clog igen 'input_text' vise på skærmen.

I praksis omdirigeres logning normalt til en fil. Følgende program illustrerer dette:

#omfatte
ved brug af navnerumtimer;

intvigtigste()
{
frit åbent( 'log.txt','i',stdout);

koste << 'input_text' <<endl;
}

Bemærk brugen af ​​funktionen, freopen () og dens argumenter. Dens første argument er navnet på logfilen. Hvis filen ikke findes, ville den blive oprettet. Dets andet argument er 'w' for 'skrive'. Dens tredje argument er stdout for standard-output. Den anden erklæring i hovedfunktionen () bruger cout til at sende logteksten til filen. Bemærk: Den faktiske indtastningskode er ikke blevet vist i dette program.

Hentning af tegn og strenge fra tastaturet

Mens brugeren skriver input, sendes tegnene til inputstream -bufferen og vises på skærmen. Når brugeren trykker på Enter -tasten, er alle tegnene i bufferen; også markøren går til begyndelsen af ​​den næste linje nedenfor, på skærmen. Programmet fortsætter derefter til den næste programerklæring efter inputlæsningssætningen.

Cin -objektet har metoder, som dette afsnit er optaget af.

Læsning af den første karakter

get (char_type & c):
Følgende kodesegment viser, hvordan man læser det første tegn fra inputstrømbufferen:

forkælelsekap;
koste << 'Inputtekst:' <<endl;
gin.(kap);
koste <<kap<<endl;

Den første erklæring erklærer et tegn uden tildeling. Den anden sætning fortæller brugeren at indtaste et tegn. Når brugeren skriver tegn og trykker på Enter -tasten, kopierer den tredje sætning tegnet fra inputstream -bufferen til variablen, kap.

Selvom brugeren indtastede mere end et tegn, ville det første tegn blive taget af kodesegmentet.

få():
get () uden argument, returnerer decimal ASCII -koden. Overvej følgende kodesegment:

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

Hvis input er 'asdfg', returneres 97, hvilket er decimal -ASCII -koden for 'a'.

get (char_type* s, streams n)

Efter at brugeren har indtastet en sætning og trykket på Enter -tasten, kan et antal tegn, der starter fra det første, udtrækkes fra cin stream -bufferen. Følgende kode kan bruges:

forkælelses[10];
koste << 'Inputtekst:' <<endl;
gin.(str,10);
koste <<s<<endl;

Hvis input er 'store mennesker', vil output være 'stor peo', på 9 tegn og ikke 10. Strengen NUL -tegn ( 0) indtager den tiende position i get -argumentet. Så for at have 9 tegn i str, skal lagringsstørrelsen være mindst 10, og get () -argumentet skal være 11. Hvis hele inputlinjen ønskes, skal strenglagernummeret mindst være tallet af tegn, der er skrevet plus 1. Så hvis 12 tegn er skrevet for hele linjen, skal tallet være 13 for strengens (str) lagringsstørrelse og 13 for get () -argumentet. Bemærk, at et mellemrum tælles som et tegn.

get (char_type* s, streamsize n, char_type delim)
Det er muligt at udtrække en understreng, afgrænset til højre, ved den første forekomst af en bestemt karakter eller ved understrengens strømstørrelse, som nogensinde kommer først. Hvis inputteksten til følgende kode er store mennesker, ville stor udtrækkes:

forkælelses[30];
koste << 'Inputtekst:' <<endl;
gin.(str,6,'eller');
koste <<s<<endl;

Den sjette position fra begyndelsen er rumtegnet, og den afgrænser udelukkende den ekstraherede delstreng. Den sjette position kommer først før den eneste karakter, 'o'. Bemærk, at lagringsstørrelsen for str kan være så høj som muligt.

Hvis inputteksten til følgende kode er store mennesker, ville gr blive ekstraheret:

forkælelses[30];
koste << 'Inputtekst:' <<endl;
gin.(str,10,'Og');
koste <<s<<endl;

Den første forekomst af 'e' kommer først før den tiende position.

Få alle tegnene i en linje

Efter at have trykket på Enter -tasten, kan alle de tegn, der er indtastet i linjen, hentes som vist i følgende kode:

koste << 'Inputtekst:' <<endl;
mens (1) {
forkælelsekap= (forkælelse)gin.();
koste <<kap;
hvis (kap== ' n')
pause;
}

Castingen med (char) konverterer hvert decimaltal til det tilsvarende ASCII -tegn.

kig ()

Get () medlemsfunktionerne læser ikke kun det næste tegn; de fjerner det fra strømbufferen. Imidlertid læser funktionen Peek () enkelt det næste tegn (begyndende fra det første) uden at fjerne det fra bufferen. I den følgende kode læses hvert tegn først med peek () -funktionen, før det fjernes af funktionen get (). Alt det sker, når brugeren trykker på Enter -tasten:

koste << 'Inputtekst:' <<endl;
mens (1) {
forkælelsekap= (forkælelse)gin.kig();
koste <<kap;
gin.();
hvis (kap== ' n')
pause;
}

Hvis de næste tegn ikke blev fjernet med get (), ville peek () kun læse det første tegn, og sløjfen gentages på ubestemt tid.

Visning og sletning af tegn, før der trykkes på Enter

Bemærk, at med cin -objektet skal der trykkes på Enter -tasten, før der kommer handling. Det er godt muligt, at tegn vises, mens de skrives og slettes, før der trykkes på Enter -tasten. Det betyder dog grænseflade med operativsystemet. Operativsystemer er forskellige. Så dette betyder forskellig kodning for forskellige operativsystemer. Så dette emne fortjener en helt anden vejledning - se senere.

Sender tegn og strenge til skærmen

Cout -objektet er et output -stream -objekt, der allerede er instanseret og findes i C ++ - standardbiblioteket. cout er hovedobjektet, der bruges til at sende tegn og strenge til skærmen. Dette gøres med indsættelsesoperatoren,<< . 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.

Udtryk, der resulterer i skalarer, kan være argumenter for indsættelsesoperatoren. Operatøren konverterer skalaren til tekst og placerer teksten i cout -objektstrømmen. Når tekst sendes til cout -objektet, vises det normalt på skærmen (skærmen). Nogle gange vises det dog muligvis ikke med det samme. For at tvinge tekst ind på skærmen skal du indsætte den særlige værdi, endl, lige efter at du har indsat teksten. Dette vil bevirke, at teksten skylles til skærmen, og der tilføjes en ny linje. Bemærk: ' n' tilføjer ganske enkelt en ny linje, men skyller ikke tekst til skærmen.

Følgende program viser, hvordan du udskriver værdierne for int, float og almindelig tekst på skærmen:

#omfatte
ved brug af navnerumtimer;

intvigtigste()
{
intdet= 5;
flydeft= 63,5;
koste << 'Det ' <<det<< 'varer koster $' <<ft<< 'USA.' <<endl;

Vend tilbage 0;
}

Outputtet er:

Det5varer koster $63,5OS.

Følgende program viser, hvordan strengen for et objekt, der er instanseret fra en klasse, udskrives:

#omfatte
ved brug af navnerumtimer;

strukturSt.{
forkælelses[elleve] = 'nogle ord';
}obj;

intvigtigste()
{
koste <<obj.s << ' n';

Vend tilbage 0;
}

Outputtet er 'nogle ord'.

Argumenter for et C ++ - program

Programkørsel starter fra hovedfunktionen (). Hovedfunktionen () har faktisk to valgfrie parametre. Syntaksen for hovedfunktionen () med de valgfrie parametre er:

intvigtigste(intargc,forkælelse *argv[argc])
{

Vend tilbage 0;
}

Antag, at navnet på den eksekverbare C ++ - fil er temp. Antag, at de argumenter, som programmet har brug for fra sit miljø (operativsystem), indtastet af brugeren, er,

artikler3bogpen'stort hus'

Der er 5 argumenter her: artikler, 3, bog, pen og stort hus

Hver er tekst. Et nummereret argument til et program er tekst. Med andre ord er hvert argument en streng. stort hus er i citater, fordi det er en sætning. Terminalkommandoen til at køre dette program ville være:

./midlertidige artikler3bogpen'stort hus'

Forudsat at filtemperaturen er i hjemmemappen. Bemærk, at mellemrum og ikke kommaer adskiller argumenterne.

Nu, i hovedfunktionssyntaksen, er argc antallet af argumenter for programmet plus 1. I dette tilfælde er der 5 argumenter for programmet. Så, argc er 6. I syntaksen er argv [argc] en række pointer til strenge. Den første værdi for denne matrix ved argv [0] er givet af kompilatoren. Det er en markør til navnet på programfilen. Resten af ​​værdierne er pejlemærker til programargumenterne i brugerens rækkefølge indtastet. Størrelsen på dette array er argc. I dette tilfælde er størrelsen 1 + 5 = 6.

Antag, at følgende program ved kompilering hedder temp:

#omfatte
ved brug af navnerumtimer;

intvigtigste(intargc,forkælelse**argv)
{

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

Vend tilbage 0;
}

Bemærk her, at matrixen 'char*argv [argc]' er blevet erklæret som 'char ** argv'.

Hvis dette program køres med terminalkommandoen,

./midlertidige artikler3bogpen'stort hus'

så ville output være:

./temp, artikler,3, bog, pen, stort hus

Bemærk, at bibliotekstien er inkluderet i navnet på den eksekverbare fil.

Bemærk også, at værdien for argc ikke er blevet sendt under programmets afvikling (kald af programmet).

Konklusion

Iostream -klassen har fire vigtige objekter, der er cout, cin, cerr og clog. cin er et inputobjekt, mens resten er outputobjekter. Mens et program kører, er input til programmet anderledes end når programmet skal begynde at køre. Når et program begynder at køre, forbindes input til programmet med kommandoen til at køre programmet, adskilt af mellemrum.