Administrere konsollen med iostream -klassene i C ++

Administrere konsollen med iostream -klassene i 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 applikasjonene bruker vinduer som vises på skjermen. Dataprogrammereren må imidlertid fortsatt bruke skjermbildet. Selv om programmereren fremdeles trenger å bruke skjermbildet, tillater ikke operativsystemet ham å gjøre det. Operativsystemet gir et vindu som simulerer skjermbildet. I Windows -operativsystemet kalles dette vinduet kommandoprompet. I Linux -operativsystemet og dets varianter kalles dette vinduet terminalen.

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

For å ha inngang fra tastaturet og utgangen til terminalen, må programmet begynne med:

#inkludere
ved hjelp av navneområdet STD;

Artikkelinnhold

  • Smale strømobjekter av standard iostream
  • Skaffe tegn og strenger fra tastaturet
  • Viser og sletter tegn før du trykker på Enter
  • Sende tegn og strenger til skjermen
  • Argumenter for et C ++ -program
  • Konklusjon

Smale strømobjekter av standard iostream

Iostream -klassen, standardobjektene, cout, cin, cerr og tette, har blitt instantiert og allerede i standardbiblioteket. Programmereren bruker dem bare uten å instantisere dem igjen.

cout

Følgende uttalelse i Main () -funksjonen sender teksten, “Dette er utdata.”Til terminalen:

cout << "This is output.";

Cout er en output iostream -objekt i standardbiblioteket, allerede instantiert. << 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 ovennevnte uttalelse vises den omdisponerte ledeteksten til høyre for utgangsfrasen. Det går ikke til neste linje. “Endl” på slutten av følgende uttalelse vil tvinge det som er skrevet ut av skjermen til neste linje:

cout << "This is output." << endl;

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

cout << "This is output." << '\n';

Med bruk av '\ n' kan alle tekstlinjene fremdeles ikke vises på skjermen umiddelbart. “Endl” skyller den komplette tekstlinjen til skjermen.

Merk: En streng sendt til Cout er i doble sitater, mens en sendt karakter er i enkelt sitater. En serie strenger og rolle kan sendes i en uttalelse, hver foran av << . All that will appear in one line at the output if '\n' is not in the series.

cin

CIN er standard Iostream Input Object, allerede instantiert og tilgjengelig i standardbiblioteket. Tenk på følgende kodesegment i Main () -funksjonen:

char txt [50];
cout << "Enter a word and press Enter:" txt;
cout << txt << endl;

Den første uttalelsen erklærer et tomt utvalg på 50 tegn. Den andre uttalelsen instruerer brukeren om å skrive inn et ord på neste skjermlinje og trykke på Enter -tasten. Legg merke til bruken av "endl" som tvinger brukeren til å legge inn tekst i neste linje på skjermen. Når brukertypen typer, gjentas den angitte teksten til skjermen mens den går inn i CIN -objektet. Etter å ha trykket på Enter, blir den tredje uttalelsen i kodesegmentet utført. Denne tredje uttalelsen sender den angitte teksten til variabelen, txt. Teksten som er lagt inn, skal ikke være lengre enn 50 tegn i dette tilfellet. Legg merke til bruken av ekstraksjonsoperatøren, >>. Den siste uttalelsen 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:

char txt [20];
int det;
Float ft;
cout << "Enter 3 values and press Enter:" txt >> det >> ft;
cout << txt << " << it << " << ft << endl;

Legg merke til uttalelsen:

cin >> txt >> det >> ft;

Det første ordet blir trukket ut til TXT, det neste til det og det siste til FT. Hvis inngangen var,

en 25 3.6

da ville utdataene etter kodesegmentet være,

en 25 3.6

Cerr

Følgende program har en feil:

#inkludere
ved hjelp av navneområdet STD;
int main ()

i myint;
retur 0;

Den første uttalelsen i Main () er ikke riktig. Hvis navnet på filen har koden er “Temp.CC ”og den resulterende kjørbare filen skal kalles“ Temp ”, deretter vil følgende G ++ -kommando sende kompilatorfeilmeldingen til filen,“ Feil.tekst":

G ++ -o Temp Temp.CC 2> Feil.tekst

Hvis filen “Feil.txt ”eksisterer ikke, det vil bli opprettet. Legg merke til delen “2> Feil.txt ”av G ++ -kommandoen.

Skjermen er standardutgangsmålet, og det er også standard feildestinasjon. Hvis “2> Feil.TXT ”er utelatt fra G ++ -kommandoen, da vil Compiler -feilmeldingen bli sendt til standardfeildestinasjonen, som fremdeles er skjermen (Monitor).

Streamobjektet som representerer standardutgangsmålet er cout. Streamobjektet som representerer standardfeildestinasjonen er CERR. En program Runtime -feil kan sendes til skjermen som følger:

Cerr << "The error message!" << '\n';

tette

En applikasjon tar forskjellige innganger til forskjellige tider. Alle inngangene kan spilles på nytt på skjermen. Alle inngangene kan lagres i en fil. Dette er logging. Standard loggdestinasjon er skjermen. Standard loggstrømobjekt er en tresko. Følgende kode vil spille inn inngangsteksten til skjermen:

char txt [50];
cout<<"Enter text and press Enter:"txt;
tette<

Hvis inngangsteksten er "input_text", vil tette på nytt "input_text" til skjermen.

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

#inkludere
ved hjelp av navneområdet STD;
int main ()

Freopen ("Logg.txt "," w ", stdout);
cout << "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 "skriv". Det tredje argumentet er stdout for standard-output. Den andre uttalelsen i Main () -funksjonen bruker COUT for å sende loggteksten til filen. Merk: Den faktiske inngangskoden er ikke vist i dette programmet.

Skaffe tegn og strenger fra tastaturet

Mens brukeren skriver inndata, blir tegnene sendt til inngangsstrømbufferen og vises 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 innspillingsoppgaven.

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

Leser den første karakteren

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

char ch;
cout << "Input text:" << endl;
cin.få (ch);
cout << ch << endl;

Den første uttalelsen erklærer et tegn uten oppdrag. Den andre uttalelsen ber brukeren legge inn et tegn. Når brukeren skriver i tegn og trykker på Enter -tasten, kopierer den tredje uttalelsen tegnet fra inngangsstrømbufferen til variabelen, CH.

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

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

cout << "Input text:" << endl;
cout << cin.get() << endl;

Hvis inngangen er "ASDFG", vil 97 bli returnert, som er desimal ASCII -koden for 'A'.

få (char_type* s, streamSize n)

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

char str [10];
cout << "Input text:" << endl;
cin.få (str, 10);
cout << str << endl;

Hvis inngangen er "flotte mennesker", vil utdataene være "flott peo", av 9 tegn og ikke 10. Strengen NUL -tegn (\ 0) tar 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 inngangslinjen er ønsket, må strenglagringsnummeret være minst antall tegn som er skrevet, pluss 1. Så hvis 12 tegn er skrevet for hele linjen, bør antallet være 13 for streng (STR) lagringsstørrelse og 13 for Get () -argumentet. Merk at ett rom regnes som ett tegn.

Get (Char_Type* S, StreamSize N, Char_Type Delim)
Det er mulig å hente ut en understreng, avgrenset til høyre, ved første forekomst av en bestemt karakter, eller av understrengens strømstørrelse, som noen gang kommer først. Hvis inngangsteksten til følgende kode er "flotte mennesker", vil "flott" bli trukket ut:

char str [30];
cout << "Input text:" << endl;
cin.få (str, 6, 'o');
cout << str << endl;

Den sjette plasseringen fra begynnelsen er romkarakteren, og den avgrenser den ekstraherte substringen utelukkende. Den sjette posisjonen kommer først før den eneste karakteren, 'O'. Merk at lagringsstørrelsen for STR kan være så høy som mulig.

Hvis inngangsteksten til følgende kode er "flotte mennesker", vil "GR" bli trukket ut:

char str [30];
cout << "Input text:" << endl;
cin.få (str, 10, 'e');
cout << str << endl;

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

Få alle karakterene på en linje

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

cout << "Input text:" << endl;
mens (1)
char ch = (char) cin.få();
cout << ch;
if (ch == '\ n')
gå i stykker;

Casting med (char), konverterer hvert desimaltall til det tilsvarende ASCII -karakteren.

Peek ()

Get () medlemsfunksjonene leser ikke bare neste karakter; De fjerner den fra strømbufferen. Imidlertid leser Peek () medlemsfunksjonen enkelt neste tegn (som begynner fra den første) uten å fjerne den fra bufferen. I den følgende koden blir hvert tegn først lest med PEek () -funksjonen før de fjernes, etter Get () -funksjonen. Alt som skjer etter at brukeren trykker på Enter -tasten:

cout << "Input text:" << endl;
mens (1)
char ch = (char) cin.Peek ();
cout << ch;
cin.få();
if (ch == '\ n')
gå i stykker;

Hvis de neste tegnene ikke ble fjernet ved Get (), ville Peek () bare lese den første karakteren, og løkken vil iterere på ubestemt tid.

Viser og sletter tegn før du trykker på Enter

Legg merke til at med CIN -objektet må Enter -tasten trykkes før det vil være handling. Vel, det er mulig for tegn som skal vises mens du blir skrevet og slettet før du trykker på Enter -tasten. Imidlertid betyr det grensesnitt mot 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 utgangsstrømobjekt, allerede instantiert og til stede i C ++ standardbiblioteket. Cout er hovedobjektet som brukes til å sende tegn og strenger til skjermen. Dette gjøres med innsettingsoperatøren, << . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until '\n' or endl is encountered.

Uttrykk som resulterer i skalarer kan være argumenter for innsettingsoperatøren. Operatøren konverterer skalaren til tekst og plasserer teksten i cout -objektstrømmen. Når tekst sendes til cout -objektet, vises den normalt på skjermen (skjerm). Noen ganger kan det imidlertid ikke vises umiddelbart. For å tvunget tekst på skjermen, sett inn den spesielle verdien, "endl", like etter å ha satt inn teksten. Dette vil føre til at teksten blir skyllet på skjermen, og en ny linje vil bli lagt til. Merk: '\ n' legger ganske enkelt til en ny linje, men spyler ikke tekst på skjermen.

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

#inkludere
ved hjelp av navneområdet STD;
int main ()

int det = 5;
FLOAT FT = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
return 0;

Utgangen er:

De 5 varene koster $ 63.5 oss.

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

#inkludere
ved hjelp av navneområdet STD;
struct st
char str [11] = "noen ord";
obj;
int main ()

cout << obj.str << '\n';
return 0;

Utgangen er "noen ord".

Argumenter for et C ++ -program

Programutførelse begynner fra Main () -funksjonen. Hovedfunksjonen () har faktisk to valgfrie parametere. Syntaksen til hoved () -funksjonen med de valgfrie parametrene, er:

int main (int argc, char *argv [argc])

return 0;

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

Artikler 3 Book Pen "Big House"

Det er 5 argumenter her: “Artikler”, “3”, “Book”, “Pen” og “Big House”

Hver er tekst. Et nummerert argument til et program er tekst. Med andre ord, hvert argument er en streng. “Big House” er i sitater fordi det er en setning. Terminalkommandoen for å kjøre dette programmet ville være:

./Temp Artikler 3 Book Pen "Big House"

Forutsatt at filtemp er i hjemmekatalogen. Merk at mellomrom og ikke kommaer skiller argumentene.

Nå, i Main () -funksjonssyntaks, er ArgC antall argumenter for programmet, pluss 1. I dette tilfellet er det 5 argumenter for programmet. Så argc er 6. I syntaks er Argv [Argc] en rekke pekere til strenger. Den første verdien for denne matrisen til ArgV [0] er gitt av kompilatoren. Det er en peker til navnet på programfilen. Resten av verdiene er pekere på programmets argumenter i brukerens ordre som er skrevet inn. Størrelsen på denne matrisen er ArgC. I dette tilfellet er størrelsen 1 + 5 = 6.

Anta at ved sammenstilling heter følgende program temp:

#inkludere
ved hjelp av navneområdet STD;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] <<
"," << argv[2] << ", " << argv[3] <<
"," << argv[4] << ", " << argv[5] << endl;
return 0;

Merk her at matrisen "char*argv [argc]", er blitt erklært som "char ** argv".

Hvis dette programmet kjøres med terminalkommandoen,

./Temp Artikler 3 Book Pen "Big House"

Da ville utgangen være:

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

Merk at katalogstien har blitt inkludert i navnet på den kjørbare filen.

Legg også merke til at i løpet av programmet (ringer av programmet), er ikke verdien for ARGC sendt.

Konklusjon

Iostream -klassen har fire viktige objekter som er cout, cin, cerr og tette. CIN er et inngangsobjekt, mens resten er utgangsobjekter. Mens et program kjører, er innspill til programmet forskjellig fra når programmet skal begynne å kjøre. Når et program begynner å kjøre, er innspill til programmet sammen med kommandoen for å kjøre programmet, atskilt av mellomrom.