C ++

Administration af konsollen med iostream-klasser i C ++

Administration af konsollen med iostream-klasser i C ++

I computing er konsollen computertastaturet og computerskærmen. Tidligere blev output sendt direkte til skærmskæ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 monitorskærmen. Selvom programmøren stadig har brug for at bruge skærmen, tillader operativsystemet ham ikke at gøre det. Operativsystemet giver et vindue, der simulerer skærmbilledet. I Windows-operativsystemet kaldes dette vindue kommandoprompt. I Linux-operativsystemet og dets varianter kaldes dette vindue terminalen.

Det forventes, at læseren allerede ved, hvordan man bruger kommandoprompten eller terminalen. Denne artikel forklarer, hvordan man læser tegn og strenge fra tastaturet og sender tegn og strenge til terminalen (eller kommandoprompten). Hver C ++ programmør har brug for at vide det i denne artikel.

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

#omfatte
ved hjælp af namespace std;

Artikelindhold

  • Narrow Stream Objects of the Standard iostream
  • Indhentning af tegn og strenge fra tastaturet
  • Visning og sletning af tegn inden tryk på Enter
  • Afsendelse af tegn og strenge til skærmen
  • Argumenter for et C ++ - program
  • Konklusion

Narrow Stream Objects of the Standard iostream

Iostream-klassen, standardobjekterne, cout, cin, cerr og clog, er blevet instantieret og allerede i standardbiblioteket. Programmøren bruger dem bare uden at genoprette dem igen.

cout

Følgende udsagn i hovedfunktionen () sender teksten, “Dette udsendes.”Til terminalen:

cout << "This is 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 udsagn vises kommandoprompten, der vises igen, til højre for outputfrasen. Det går ikke til næste linje. "Endl" i slutningen af ​​følgende udsagn vil tvinge det, der udskrives på skærmen, til næste linje:

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

“Endl” er en foruddefineret variabel. Skærmindhold kan også tvinges til næste linje med:

cout << "This is 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, der sendes til cout, er i dobbelt anførselstegn, mens et sendt tegn er i enkelt anførselstegn. En række strenge og tegn kan sendes i en erklæring, hver forud for << . All that will appear in one line at the output if '\n' is not in the series.

cin

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

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

Den første erklæring erklærer en tom matrix på 50 tegn. Den anden sætning instruerer brugeren om at skrive 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, gentages den indtastede tekst på skærmen, mens den går ind i cin-objektet. Efter tryk på Enter udføres den tredje sætning i kodesegmentet. Denne tredje sætning sender den indtastede tekst til variablen txt. Den indtastede tekst bør i dette tilfælde ikke være længere end 50 tegn. Bemærk brugen af ​​udvindingsoperatøren, >>. Den sidste sætning viser den indtastede tekst på skærmen.

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

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

Bemærk erklæringen:

cin >> txt >> it >> ft;

Det første ord ekstraheres til txt, det næste ved det og det sidste til ft. Hvis input var,

en 25 3.6

så ville output fra kodesegmentet være,

en 25 3.6

cerr

Følgende program har en fejl:

#omfatte
ved hjælp af namespace std;
int main ()

i minInt;
returnere 0;

Den første sætning i main () er ikke korrekt. Hvis navnet på filen med koden er “temp.cc ”og den resulterende eksekverbare fil skal kaldes“ temp ”, så vil følgende g ++ kommando sende compiler-fejlmeddelelsen til filen,“ error.txt ”:

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

Hvis filen “fejl.txt ”findes ikke, det ville blive oprettet. Bemærk delen "2> fejl.txt ”i g ++ kommandoen.

Skærmen er standardoutputdestinationen, og det er også standardfejldestinationen. Hvis “2> fejl.txt ”udelades fra g ++ kommandoen, så sendes compiler-fejlmeddelelsen til standardfejldestinationen, som stadig er skærmen (skærm).

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

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

tilstoppe

En applikation tager forskellige input på forskellige tidspunkter. Alle indgange kan vises igen på skærmen. Alle input kan gemmes i en fil. Dette er logning. Standardlogdestinationen er skærmen. Standard logge stream objektet er en tilstopning. Følgende kode viser inputteksten på skærmen igen:

char txt [50];
cout<<"Enter text and press Enter:"<>txt
tilstoppe<Hvis inputteksten er "input_text", vil tilstopning vise "input_text" igen på skærmen.

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

#omfatte
ved hjælp af namespace std;
int main ()

freopen ("log.txt "," w ", stdout);
cout << "input_text" << endl;

Bemærk brugen af ​​funktionen, freopen () og dens argumenter. Dens første argument er navnet på logfilen. Hvis filen ikke findes, oprettes den. Dets andet argument er "w" for "skriv". Dets tredje argument er stdout for standard-output. Den anden sætning i hovedfunktionen () bruger cout til at sende loggeteksten til filen. Bemærk: Den aktuelle inputkode er ikke vist i dette program.

Indhentning af tegn og strenge fra tastaturet

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

Cin-objektet har metoder, som dette afsnit vedrører.

Læsning af det første tegn

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

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

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

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:

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

Hvis input er "asdfg", returneres 97, hvilket er den decimale ASCII-kode for 'a'.

get (char_type * s, streamsize n)

Når brugeren har indtastet en sætning og trykket på Enter-tasten, kan et antal tegn, der begynder med den første, udvindes fra cin-streambufferen. Følgende kode kan bruges:

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

Hvis input er "store mennesker", vil output være "stor peo" med 9 tegn og ikke 10. Strengen NUL-tegn (\ 0) indtager den tiende position i get-argumentet. For at have 9 tegn i str. Skal dens lagringsstørrelse være mindst 10, og argumentet get () skal være 11. Hvis hele inputlinjen ønskes, skal strenglagringsnummeret mindst være det antal tegn, der er skrevet plus 1. Så hvis der er skrevet 12 tegn for hele linjen, skal tallet være 13 for streng (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 et bestemt tegn eller ved understrengens streamsize, der nogensinde kommer først. Hvis inputteksten til den følgende kode er “store mennesker”, ville “stor” blive uddraget:

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

Den sjette position fra starten er rumkarakteren, og den afgrænser udelukkende det ekstraherede underlag. 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 den følgende kode er "store mennesker", ville "gr" blive ekstraheret:

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

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

Få alle tegnene på en linje

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

cout << "Input text:" << endl;
mens (1)
char ch = (char) cin.få();
cout << ch;
hvis (ch == '\ n')
pause;

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

kigge ()

Get () - medlemsfunktionerne læser ikke kun det næste tegn; de fjerner det fra strømbufferen. Imidlertid læser peek () medlemsfunktionen 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 den fjernes, ved hjælp af get () -funktionen. Alt, hvad der sker, efter at brugeren har trykket på Enter-tasten:

cout << "Input text:" << endl;
mens (1)
char ch = (char) cin.kig ();
cout << ch;
cin.få();
hvis (ch == '\ n')
pause;

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

Visning og sletning af tegn inden tryk på Enter

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

Afsendelse af tegn og strenge til skærmen

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

Udtryk, der resulterer i skalarer, kan være argumenter for indsættelsesoperatøren. Operatøren konverterer skalar til tekst og placerer teksten i cout-objektstrømmen. Når der sendes tekst til cout-objektet, vises det normalt på skærmen (skærm). Imidlertid kan det lejlighedsvis ikke vises med det samme. For at tvinge tekst ind på skærmen skal du indsætte den specielle værdi "endl" lige efter indsættelse af teksten. Dette vil medføre, at teksten skylles til skærmen, og der tilføjes en ny linje. Bemærk: '\ n' tilføjer simpelthen en ny linje, men skyller ikke tekst til skærmen.

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

#omfatte
ved hjælp af namespace std;
int main ()

int it = 5;
flyde ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
returnere 0;

Outputtet er:

De 5 varer koster $ 63.5 US.

Følgende program viser, hvordan strengen til et objekt, der instantieres fra en klasse, udskrives:

#omfatte
ved hjælp af namespace std;
struct St
char str [11] = "nogle ord";
obj;
int main ()

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

Outputtet er "nogle ord".

Argumenter for et C ++ - program

Programudførelse begynder fra hovedfunktionen (). Hovedfunktionen () har faktisk to valgfri parametre. Syntaksen for hovedfunktionen () med de valgfri parametre er:

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

returnere 0;

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

artikler 3 bog pen "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 anførselstegn, fordi det er en sætning. Terminalkommandoen til at køre dette program ville være:

./ midlertidige artikler 3 bog pen "stort hus"

Antages det, at filtemp. Er i hjemmekataloget. Bemærk, at mellemrum og ikke kommaer skiller argumenterne.

I hovedtypen () syntaks 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 pegepunkter til strenge. Den første værdi for denne matrix ved argv [0] gives af compileren. Det er en markør til navnet på programfilen. Resten af ​​værdierne er peger på programargumenterne i brugerens rækkefølge, der er indtastet. Størrelsen på denne matrix er argc. I dette tilfælde er størrelsen 1 + 5 = 6.

Antag, at ved kompilering får følgende program navnet temp:

#omfatte
ved hjælp af namespace std;
int main (int argc, char ** argv)

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

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

Hvis dette program køres med terminalkommandoen,

./ midlertidige artikler 3 bog pen "stort hus"

så ville output være:

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

Bemærk, at katalogstien er inkluderet med navnet på den eksekverbare fil.

Bemærk også, at værdien for argc ikke er sendt under kørsel af programmet (kald af programmet).

Konklusion

Klassen iostream 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 forskelligt fra, hvornår programmet skal køre. Når et program begynder at køre, er input til programmet forbundet med kommandoen til at køre programmet, adskilt af mellemrum.

HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...
Sådan bruges AutoKey til at automatisere Linux-spil
AutoKey er et desktopautomatiseringsværktøj til Linux og X11, programmeret i Python 3, GTK og Qt. Ved hjælp af dets scripting og MACRO-funktionalitet ...
Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...