C ++

Gestionarea consolei cu clasele iostream în C ++

Gestionarea consolei cu clasele iostream în C ++

În calcul, consola este tastatura computerului și monitorul computerului. În trecut, ieșirea era trimisă direct pe ecranul monitorului și nu către o fereastră afișată pe monitor. Pentru utilizatorul obișnuit al computerului, aplicațiile de astăzi nu utilizează monitorul în mod explicit. Aceste aplicații utilizează ferestre afișate pe monitor. Cu toate acestea, programatorul de computer trebuie să utilizeze în continuare ecranul monitorului. Deși programatorul trebuie să folosească în continuare ecranul monitorului, sistemul de operare nu-i permite să facă asta. Sistemul de operare oferă o fereastră care simulează ecranul monitorului. În sistemul de operare Windows, această fereastră se numește prompt de comandă. În sistemul de operare Linux și variantele sale, această fereastră se numește terminal.

Se așteaptă ca cititorul să știe deja cum să utilizeze linia de comandă sau terminalul. Acest articol explică cum să citiți caractere și șiruri de la tastatură și să trimiteți caractere și șiruri la terminal (sau prompt de comandă). Fiecare programator C ++ trebuie să știe în acest articol.

Pentru a avea intrare de la tastatură și ieșire la terminal, programul trebuie să înceapă cu:

#include
folosind spațiul de nume std;

Conținutul articolului

  • Obiecte de flux îngust ale iostream-ului standard
  • Obținerea de caractere și șiruri de pe tastatură
  • Afișarea și ștergerea caracterelor înainte de a apăsa Enter
  • Trimiterea de caractere și șiruri pe monitor
  • Argumente pentru un program C ++
  • Concluzie

Obiecte de flux îngust ale iostream-ului standard

Clasa iostream, obiectele standard, cout, cin, cerr și clog, au fost instantiate și deja în biblioteca standard. Programatorul le folosește fără să le instanțeze din nou.

cout

Următoarea afirmație din funcția main () trimite textul: „Acesta este afișat.”La terminal:

cout << "This is output.";

cout este un obiect iostream de ieșire din biblioteca standard, deja instanțiat. << 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.

Cu declarația de mai sus, promptul de comandă afișat din nou apare în dreapta frazei de ieșire. Nu trece la linia următoare. „Endl” la sfârșitul următoarei declarații va forța tot ceea ce este imprimat de ecran la următoarea linie:

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

„Endl” este o variabilă predefinită. Conținutul ecranului poate fi, de asemenea, forțat la următoarea linie cu:

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

Cu utilizarea „\ n”, este posibil ca toate liniile de text să nu apară imediat pe ecran. „Endl” trage linia completă de text pe ecran.

Notă: un șir trimis la cout este între ghilimele duble, în timp ce un caracter trimis este între ghilimele simple. O serie de șiruri și caractere pot fi trimise într-o singură declarație, fiecare precedată de << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin este obiectul standard de intrare iostream, deja instanțiat și disponibil în biblioteca standard. Luați în considerare următorul segment de cod în funcția main ():

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

Prima declarație declară o matrice goală de 50 de caractere. A doua declarație îi instruiește utilizatorului să introducă un cuvânt pe următoarea linie a ecranului și să apese tasta Enter. Rețineți utilizarea „endl” care forțează utilizatorul să introducă text în următoarea linie a ecranului. Pe măsură ce utilizatorul tastează text, textul introdus este ecou pe ecran în timp ce intră în obiectul cin. După apăsarea Enter, a treia instrucțiune din segmentul de cod este executată. Această a treia declarație trimite textul introdus variabilei, txt. Textul introdus nu trebuie să depășească 50 de caractere în acest caz. Rețineți utilizarea operatorului de extracție, >>. Ultima declarație afișează textul introdus pe ecran.

cin poate lua mai multe cuvinte de la tastatură, separate prin spații. Aceste cuvinte vor trebui extrase în diferite variabile. Următorul segment de cod ilustrează acest lucru:

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

Rețineți declarația:

cin >> txt >> it >> ft;

Primul cuvânt este extras în txt, următorul și ultimul în ft. Dacă intrarea a fost,

unul 25 3.6

atunci ieșirea de către segmentul de cod ar fi,

unul 25 3.6

cerr

Următorul program are o eroare:

#include
folosind spațiul de nume std;
int main ()

în myInt;
retur 0;

Prima afirmație din main () nu este corectă. Dacă numele fișierului care are codul este „temp.cc ”și fișierul executabil rezultat va fi numit„ temp ”, apoi următoarea comandă g ++ va trimite mesajul de eroare al compilatorului către fișier,„ eroare.txt":

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

Dacă fișierul „eroare.txt ”nu există, ar fi creat. Rețineți porțiunea „2> eroare.txt ”al comenzii g ++.

Ecranul este destinația de ieșire standard și este, de asemenea, destinația de eroare standard. Dacă „2> eroare.txt ”este omis din comanda g ++, apoi mesajul de eroare al compilatorului va fi trimis la destinația de eroare standard, care este încă ecranul (monitorul).

Obiectul de flux care reprezintă destinația de ieșire standard este cout. Obiectul de flux care reprezintă destinația de eroare standard este cerr. O eroare de runtime a programului poate fi trimisă pe ecran după cum urmează:

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

înfunda

O aplicație acceptă intrări diferite în momente diferite. Toate intrările pot fi afișate din nou pe ecran. Toate intrările pot fi salvate într-un fișier. Aceasta este înregistrarea în jurnal. Destinația standard de înregistrare este ecranul. Obiectul standard al fluxului de înregistrare este o înfundare. Următorul cod va afișa din nou textul de intrare pe ecran:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
înfunda<Dacă textul introdus este „input_text”, atunci înfundarea ar afișa din nou „input_text” pe ecran.

În practică, înregistrarea este de obicei redirecționată către un fișier. Următorul program ilustrează acest lucru:

#include
folosind spațiul de nume std;
int main ()

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

Rețineți utilizarea funcției, freopen () și argumentele sale. Primul său argument este numele fișierului jurnal. Dacă fișierul nu există, ar fi creat. Al doilea argument este „w” pentru „scrie”. Al treilea argument al său este stdout pentru ieșirea standard. A doua declarație din funcția main () folosește cout pentru a trimite textul de înregistrare în fișier. Notă: Codul de intrare real nu a fost afișat în acest program.

Obținerea de caractere și șiruri de pe tastatură

În timp ce utilizatorul tastează intrarea, caracterele sunt trimise în bufferul fluxului de intrare și afișate pe ecran. Când utilizatorul apasă tasta Enter, toate caracterele sunt în buffer; de asemenea, cursorul merge la începutul următoarei linii de mai jos, pe ecran. Programul continuă apoi cu următoarea declarație de program, după declarația de citire a intrării.

Obiectul cin are metode, de care se referă această secțiune.

Citind primul personaj

get (char_type & c):
Următorul segment de cod arată cum să citiți primul caracter, din bufferul fluxului de intrare:

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

Prima declarație declară un caracter fără atribuire. A doua declarație îi spune utilizatorului să introducă un caracter. Când utilizatorul tastează caracterul și apasă tasta Enter, a treia declarație copiază caracterul din bufferul fluxului de intrare în variabilă, ch.

Chiar dacă utilizatorul a tastat mai multe caractere, primul caracter ar fi luat de segmentul de cod.

obține():
get () fără argument, returnează codul ASCII zecimal. Luați în considerare următorul segment de cod:

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

Dacă intrarea este „asdfg”, atunci va fi returnat 97, care este codul ASCII zecimal pentru „a”.

get (char_type * s, stream stream n)

După ce utilizatorul introduce o frază și apasă tasta Enter, un număr de caractere începând cu prima, pot fi extrase din memoria tampon de flux cin. Se poate utiliza următorul cod:

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

Dacă intrarea este „oameni minunați”, atunci ieșirea va fi „mare peo”, de 9 caractere și nu de 10. Șirul caracter NUL (\ 0) ocupă a zecea poziție în argumentul get. Deci, pentru a avea 9 caractere în str, dimensiunea de stocare trebuie să fie de cel puțin 10, iar argumentul get () trebuie să fie 11. Dacă se dorește întreaga linie de intrare, atunci numărul de stocare șir trebuie să fie cel puțin numărul de caractere tastate, plus 1. Deci, dacă sunt introduse 12 caractere pentru întreaga linie, atunci numărul ar trebui să fie 13 pentru dimensiunea de stocare șir (str) și 13 pentru argumentul get (). Rețineți că un spațiu este numărat ca un singur caracter.

get (char_type * s, stream stream n, char_type delim)
Este posibil să extrageți un sub-șir, delimitat în dreapta, de prima apariție a unui anumit caracter sau de dimensiunea fluxului sub-șirului, care este pe primul loc. Dacă textul introdus în următorul cod este „oameni minunați”, atunci „minunat” ar fi extras:

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

A șasea poziție de la început este caracterul spațial și delimitează exclusiv șirul extras. A șasea poziție este pe primul loc înainte de singurul personaj, „o”. Rețineți că dimensiunea de stocare pentru str poate fi cât mai mare posibil.

Dacă textul introdus în următorul cod este „oameni minunați”, atunci „gr” ar fi extras:

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

Prima apariție a „e”, apare mai întâi înainte de a zecea poziție.

Obținerea tuturor caracterelor unei linii

După apăsarea tastei Enter, toate caracterele tastate în linie pot fi obținute așa cum se arată în următorul cod:

cout << "Input text:" << endl;
în timp ce (1)
char ch = (char) cin.obține();
cout << ch;
if (ch == '\ n')
pauză;

Distribuirea cu (char) convertește fiecare număr zecimal în caracterul ASCII corespunzător.

arunca o privire()

Funcțiile de membru get () nu citesc doar următorul caracter; îl scot din bufferul fluxului. Cu toate acestea, funcția membru peek () simplu citește următorul caracter (începând cu primul) fără a-l elimina din buffer. În următorul cod, fiecare caracter este citit mai întâi cu funcția peek () înainte de a fi eliminat, de funcția get (). Tot ce se întâmplă după ce utilizatorul apasă tasta Enter:

cout << "Input text:" << endl;
în timp ce (1)
char ch = (char) cin.arunca o privire();
cout << ch;
cin.obține();
if (ch == '\ n')
pauză;

Dacă următoarele caractere nu ar fi eliminate prin get (), peek () ar citi doar primul caracter, iar bucla va itera la nesfârșit.

Afișarea și ștergerea caracterelor înainte de a apăsa Enter

Observați că, cu obiectul cin, trebuie apăsată tasta Enter înainte ca acțiunea să fie acționată. Ei bine, este posibil ca caracterele să fie afișate în timp ce sunt tastate și șterse înainte de a apăsa tasta Enter. Cu toate acestea, asta înseamnă interfață cu sistemul de operare. Sistemele de operare diferă. Deci, aceasta înseamnă codificare diferită pentru diferite sisteme de operare. Deci, acest subiect merită un tutorial complet diferit - vezi mai târziu.

Trimiterea de caractere și șiruri pe monitor

Obiectul cout este un obiect de flux de ieșire, deja instanțiat și prezent în biblioteca standard C ++. cout este obiectul principal utilizat pentru trimiterea de caractere și șiruri către monitor. Acest lucru se face cu operatorul de inserare, << . 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.

Expresiile care duc la scalari pot fi argumente pentru operatorul de inserare. Operatorul convertește scalarul în text și plasează textul în fluxul de obiecte cout. Când textul este trimis obiectului cout, acesta apare în mod normal pe ecran (monitor). Cu toate acestea, ocazional, este posibil să nu apară imediat. Pentru a forța textul pe ecran, introduceți valoarea specială, „endl”, imediat după inserarea textului. Acest lucru va face ca textul să fie afișat pe ecran și va fi adăugată o nouă linie. Notă: „\ n” adaugă pur și simplu o linie nouă, dar nu elimină textul pe ecran.

Următorul program arată cum să imprimați valorile int, float și text obișnuit pe ecran:

#include
folosind spațiul de nume std;
int main ()

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

Ieșirea este:

Cele 5 articole costă 63 USD.5 SUA.

Următorul program arată cum este tipărit șirul unui obiect instanțiat dintr-o clasă:

#include
folosind spațiul de nume std;
struct St
char str [11] = "unele cuvinte";
obj;
int main ()

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

Rezultatul este „niște cuvinte”.

Argumente pentru un program C ++

Executarea programului începe de la funcția main (). Funcția main () are de fapt doi parametri opționali. Sintaxa funcției main () cu parametrii opționali este:

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

retur 0;

Să presupunem că numele fișierului executabil C ++ este „temp”. Să presupunem că argumentele de care are nevoie programul din mediul său (sistemul de operare), tastate de utilizator, sunt,

articole 3 carte stilou "casa mare"

Există 5 argumente aici: „articole”, „3”, „carte”, „stilou” și „casă mare”

Fiecare este text. Un argument numerotat pentru un program este textul. Cu alte cuvinte, fiecare argument este un șir. „Casa mare” este între ghilimele pentru că este o frază. Comanda terminalului pentru a rula acest program ar fi:

./ temp articole 3 cărți stilou "casa mare"

Presupunând că temperatura fișierului se află în directorul principal. Rețineți că spațiile și nu virgulele separă argumentele.

Acum, în sintaxa funcției main (), argc este numărul de argumente pentru program, plus 1. În acest caz, există 5 argumente pentru program. Deci, argc este 6. În sintaxă, argv [argc] este o serie de indicatori către șiruri. Prima valoare pentru această matrice la argv [0] este dată de compilator. Este un indicator către numele fișierului program. Restul valorilor sunt indicii către argumentele programului în ordinea utilizatorului introdus. Dimensiunea acestei matrice este argc. În acest caz, dimensiunea este 1 + 5 = 6.

Să presupunem că la compilare, următorul program se numește temp:

#include
folosind spațiul de nume std;
int main (int argc, char ** argv)

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

Rețineți aici că matricea "char * argv [argc]" a fost declarată ca "char ** argv".

Dacă acest program este rulat cu comanda terminal,

./ temp articole 3 cărți stilou "casa mare"

atunci rezultatul ar fi:

./ temp, articole, 3, carte, stilou, casa mare

Rețineți că calea directorului a fost inclusă cu numele fișierului executabil.

De asemenea, rețineți că în timpul rulării programului (apelarea programului), valoarea pentru argc nu a fost trimisă.

Concluzie

Clasa iostream are patru obiecte importante care sunt cout, cin, cerr și clog. cin este un obiect de intrare, în timp ce restul sunt obiecte de ieșire. În timp ce rulează un program, intrarea în program este diferită de momentul în care programul începe să ruleze. Când un program începe să ruleze, intrarea în program este unită cu comanda pentru a rula programul, separate prin spații.

Cum se folosește Xdotool pentru a stimula clicurile și tastele mouse-ului în Linux
Xdotool este un instrument de linie de comandă gratuit și open source pentru simularea clicurilor și a apăsărilor de mouse. Acest articol va acoperi u...
Top 5 produse ergonomice pentru mouse de calculator pentru Linux
Utilizarea prelungită a computerului vă provoacă dureri la încheietura mâinii sau la degete? Suferați de articulații rigide și trebuie să vă dați mâin...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...