C ++

Upravljanje konzolom s iostream klasa u C ++

Upravljanje konzolom s iostream klasa u C ++

U računarstvu, konzola je tipkovnica računala i računalni monitor. U prošlosti se izlaz slao izravno na zaslon monitora, a ne u prozor prikazan na monitoru. Za običnog korisnika računala, aplikacije danas ne koriste monitor izričito. Ovi programi koriste prozore prikazane na monitoru. Međutim, računalni programer i dalje mora koristiti zaslon monitora. Iako programer još uvijek mora koristiti zaslon monitora, operativni sustav mu to ne dopušta. Operativni sustav nudi prozor koji simulira zaslon monitora. U operacijskom sustavu Windows ovaj se prozor naziva naredbeni redak. U operativnom sustavu Linux i njegovim inačicama ovaj se prozor naziva terminal.

Očekuje se da čitatelj već zna koristiti naredbeni redak ili terminal. Ovaj članak objašnjava kako čitati znakove i nizove s tipkovnice i slati znakove i nizove na terminal (ili naredbeni redak). Svaki programer na C ++-u mora znati u ovom članku.

Da bi ulaz imao s tipkovnice i izlaz na terminal, program mora započeti s:

#include
pomoću prostora imena std;

Sadržaj članka

  • Objekti uskog toka standardne iostream
  • Dobivanje znakova i nizova s ​​tipkovnice
  • Prikazivanje i brisanje znakova prije pritiska na Enter
  • Slanje znakova i nizova na monitor
  • Argumenti za program C ++
  • Zaključak

Objekti uskog toka standardne iostream

Klasa iostream, standardni objekti, cout, cin, cerr i clog, instancirani su i već su u standardnoj knjižnici. Programer ih samo koristi bez ponovnog instanciranja.

cout

Sljedeća izjava u funkciji main () šalje tekst, “Ovo je izlaz.”Do terminala:

cout << "This is output.";

cout je izlazni objekt jostream u standardnoj knjižnici, već instanciran. << 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.

S gornjom izjavom, ponovno prikazani naredbeni redak pojavit će se s desne strane izlazne fraze. Ne ide u sljedeći redak. "Endl" na kraju sljedeće izjave prisilit će ono što se na zaslonu ispiše u sljedeći redak:

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

"Endl" je unaprijed definirana varijabla. Sadržaj zaslona također se može prebaciti u sljedeći redak pomoću:

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

Uz upotrebu '\ n', svi se redovi teksta još uvijek možda neće pojaviti na zaslonu odmah. "Endl" ispire kompletan redak teksta na zaslon.

Napomena: niz poslan cout-u nalazi se u dvostrukim navodnicima, dok je poslani znak u pojedinačnim navodnicima. Niz nizova i znakova može se poslati u jednoj izjavi, svakoj prethodi << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin je standardni ulazni objekt iostream, već instanciran i dostupan u standardnoj knjižnici. Razmotrite sljedeći segment koda u funkciji main ():

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

Prva izjava deklarira prazan niz od 50 znakova. Druga izjava upućuje korisnika da upiše riječ u sljedeći redak zaslona i pritisne tipku Enter. Obratite pažnju na upotrebu "endl" koji prisiljava korisnika da unese tekst u sljedeći redak zaslona. Dok korisnik upisuje tekst, uneseni tekst odjekuje na zaslon dok ulazi u objekt cin. Nakon pritiska na Enter izvršava se treća izjava u segmentu koda. Ova treća izjava šalje uneseni tekst na varijablu, txt. Uneseni tekst u ovom slučaju ne smije biti duži od 50 znakova. Obratite pažnju na upotrebu operatora ekstrakcije, >>. Posljednja izjava prikazuje uneseni tekst na ekranu.

cin može uzeti više riječi s tipkovnice, odvojene razmacima. Te će se riječi morati izdvojiti u različite varijable. Sljedeći segment koda to ilustrira:

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

Obratite pažnju na izjavu:

cin >> txt >> it >> ft;

Prva se riječ izdvaja u txt, sljedeća uz nju, a zadnja u ft. Ako je ulaz bio,

jedan 25 3.6

tada bi izlaz segmenta koda bio,

jedan 25 3.6

cerr

Sljedeći program ima pogrešku:

#include
pomoću prostora imena std;
int main ()

u myInt;
return 0;

Prva izjava u main () nije točna. Ako je naziv datoteke s kodom „temp.cc ", a rezultirajuća izvršna datoteka nazvat će se" temp ", tada će sljedeća naredba g ++ poslati datoteku poruku pogreške kompajlera," error.txt ":

g ++ -o temp temp.cc 2> pogreška.txt

Ako datoteka „pogreška.txt ”ne postoji, on bi bio stvoren. Obratite pažnju na dio "2> pogreška.txt ”naredbe g ++.

Zaslon je standardno odredište izlaza, a ujedno je i standardno odredište pogreške. Ako je "2> pogreška.txt ”izostavljen je iz naredbe g ++, tada bi se poruka pogreške kompajlera poslala na standardno odredište pogreške, a to je još uvijek zaslon (monitor).

Stream objekt koji predstavlja standardno izlazno odredište je cout. Stream objekt koji predstavlja standardno odredište pogreške je cerr. Pogreška u izvršavanju programa može se poslati na zaslon na sljedeći način:

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

začepiti

Aplikacija uzima različite unose u različito vrijeme. Svi se ulazi mogu ponovno prikazati na zaslonu. Svi ulazi mogu se spremiti u datoteku. Ovo je bilježenje. Standardno odredište zapisivanja je zaslon. Standardni objekt protoka zapisivanja je začepljenje. Sljedeći će kôd ponovno prikazati ulazni tekst na zaslon:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
začepiti<Ako je ulazni tekst "input_text", tada bi začepljenje ponovno prikazalo "input_text" na zaslonu.

U praksi se bilježenje obično preusmjerava na datoteku. Sljedeći program to ilustrira:

#include
pomoću prostora imena std;
int main ()

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

Obratite pažnju na upotrebu funkcije freopen () i njene argumente. Njegov prvi argument je naziv datoteke dnevnika. Ako datoteka ne postoji, bit će stvorena. Njegov drugi argument je "w" za "write". Treći je argument stdout za standardni izlaz. Drugi izraz u funkciji main () koristi cout za slanje teksta evidentiranja u datoteku. Napomena: Stvarni ulazni kod nije prikazan u ovom programu.

Dobivanje znakova i nizova s ​​tipkovnice

Dok korisnik tipka unos, znakovi se šalju u međuspremnik ulaznog toka i prikazuju na zaslonu. Kad korisnik pritisne tipku Enter, svi su znakovi u međuspremniku; također, pokazivač ide na početak sljedećeg retka ispod, na zaslonu. Program zatim nastavlja na sljedeću programsku izjavu, nakon ulazne izjave o čitanju.

Cin objekt ima metode kojima se bavi ovaj odjeljak.

Čitanje prvog lika

dobiti (char_type & c):
Sljedeći segment koda pokazuje kako čitati prvi znak iz međuspremnika ulaznog toka:

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

Prva izjava deklarira znak bez dodjele. Druga izjava govori korisniku da unese znak. Kada korisnik upiše znak i pritisne tipku Enter, treća izjava kopira znak iz međuspremnika ulaznog toka u varijablu ch.

Čak i ako je korisnik upisao više od jednog znaka, prvi znak bi zauzeo segment koda.

dobiti():
get () bez argumenta, vraća decimalni ASCII kôd. Razmotrite sljedeći segment koda:

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

Ako je ulaz "asdfg", tada bi se vratilo 97, što je decimalni ASCII kod za 'a'.

dobiti (char_type * s, streamsize n)

Nakon što korisnik unese frazu i pritisne tipku Enter, broj znakova koji počinju od prvog može se izdvojiti iz međuspremnika cin stream. Može se koristiti sljedeći kod:

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

Ako su ulazni podaci "sjajni ljudi", izlaz će biti "sjajni ljudi", s 9 znakova, a ne 10. Znak NUL u nizu (\ 0) zauzima deseto mjesto u argumentu get. Dakle, da bi u str imalo 9 znakova, njegova veličina pohrane mora biti najmanje 10, a argument get () mora biti 11. Ako se želi čitav redak za unos, tada broj pohrane niza mora biti najmanje broj upisanih znakova, plus 1. Dakle, ako se za cijeli redak upiše 12 znakova, tada bi broj trebao biti 13 za veličinu spremišta niza (str) i 13 za argument get (). Imajte na umu da se jedan razmak računa kao jedan znak.

dobiti (char_type * s, streamsize n, char_type delim)
Moguće je izdvojiti podniz, razgraničen s desne strane, prvom pojavom određenog znaka ili veličinom stream-a pod-niza, koja je uvijek prva. Ako su ulazni tekst za sljedeći kôd "sjajni ljudi", izvući će se "sjajno":

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

Šesta pozicija od početka je razmak i on ograničava isključivo izdvojenu podniz. Šesta pozicija dolazi prva prije jedinog lika, 'o'. Imajte na umu da veličina pohrane za str može biti što veća.

Ako su ulazni tekst za sljedeći kod "sjajni ljudi", izvući će se "gr":

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

Prvo pojavljivanje 'e' dolazi prvo prije desete pozicije.

Dobivanje svih znakova crte

Nakon pritiska na tipku Enter svi znakovi upisani u redak mogu se dobiti kao što je prikazano u sljedećem kodu:

cout << "Input text:" << endl;
dok (1)
char ch = (char) cin.dobiti();
cout << ch;
ako (ch == '\ n')
pauza;

Lijevanje s (char) pretvara svaki decimalni broj u odgovarajući ASCII znak.

zaviriti ()

Funkcije člana get () ne čitaju samo sljedeći znak; uklanjaju ga iz me uspremnika. Međutim, funkcija člana peek () jednostavno čita sljedeći znak (počevši od prvog), a da ga ne uklanja iz međuspremnika. U sljedećem kodu svaki se znak prvo čita funkcijom peek () prije nego što ga ukloni funkcija get (). Sve što se događa nakon što korisnik pritisne tipku Enter:

cout << "Input text:" << endl;
dok (1)
char ch = (char) cin.zaviriti ();
cout << ch;
cin.dobiti();
ako (ch == '\ n')
pauza;

Da sljedeći znakovi nisu uklonjeni pomoću get (), peek () bi čitao samo prvi znak, a petlja će se ponavljati neograničeno.

Prikazivanje i brisanje znakova prije pritiska na Enter

Primijetite da se kod cin objekta mora pritisnuti tipka Enter prije pokretanja radnje. Pa, moguće je da se znakovi prikazuju dok se upisuju i brišu prije pritiska na tipku Enter. Međutim, to znači povezivanje s operativnim sustavom. Operativni sustavi se razlikuju. Dakle, to znači različito kodiranje za različite operativne sustave. Dakle, ova tema zaslužuje posve drugačiji vodič - pogledajte kasnije.

Slanje znakova i nizova na monitor

Cout objekt je objekt izlaznog toka, koji je već instanciran i prisutan u standardnoj knjižnici C ++. cout je glavni objekt koji se koristi za slanje znakova i nizova na monitor. To se radi s operatorom umetanja, << . 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.

Izrazi koji rezultiraju skalarima mogu biti argumenti za operator umetanja. Operator pretvara skalar u tekst i postavlja ga u tok objekta cout. Kad se tekst pošalje na objekt rute, on se obično pojavljuje na zaslonu (monitoru). Međutim, povremeno se možda neće pojaviti odmah. Da biste tekst prisilili na zaslon, umetnite posebnu vrijednost "endl", odmah nakon umetanja teksta. To će dovesti do ispiranja teksta na zaslon i dodat će se novi redak. Napomena: '\ n' jednostavno dodaje novi redak, ali ne ispire tekst na zaslon.

Sljedeći program pokazuje kako ispisati vrijednosti int, float i obični tekst na zaslon:

#include
pomoću prostora imena std;
int main ()

int to = 5;
plutajuća ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
return 0;

Izlaz je:

5 predmeta košta 63 dolara.5 US.

Sljedeći program pokazuje kako se ispisuje niz objekta instanciranog iz klase:

#include
pomoću prostora imena std;
struct St
char str [11] = "neke riječi";
obj;
int main ()

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

Rezultat je "neke riječi".

Argumenti za program C ++

Izvršenje programa započinje od glavne () funkcije. Funkcija main () zapravo ima dva neobavezna parametra. Sintaksa funkcije main () s neobaveznim parametrima je:

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

return 0;

Pretpostavimo da je ime izvršne datoteke C ++ "temp". Pretpostavimo da su argumenti koji su potrebni programu iz svog okruženja (operativnog sustava), a koji je kucao korisnik,,

članci 3 olovka za knjige "velika kuća"

Ovdje postoji 5 argumenata: „članci“, „3“, „knjiga“, „olovka“ i „velika kuća“

Svaka je tekst. Numerirani argument programa je tekst. Drugim riječima, svaki je argument niz. "Velika kuća" nalazi se u navodnicima jer je riječ o frazi. Naredba terminala za pokretanje ovog programa bila bi:

./ temp članci 3 olovka za knjige "velika kuća"

Pod pretpostavkom da se privremena datoteka nalazi u matičnom direktoriju. Imajte na umu da razmaci i ne zarez razdvajaju argumente.

Sada je u sintaksi funkcije main () argc broj argumenata za program, plus 1. U ovom slučaju postoji 5 argumenata za program. Dakle, argc je 6. U sintaksi je argv [argc] niz pokazivača na nizove. Prvu vrijednost za ovaj niz na argv [0] daje prevodilac. Pokazivač je na naziv programske datoteke. Ostale su vrijednosti pokazivači na programske argumente po upisanom redoslijedu korisnika. Veličina ovog polja je argc. U ovom slučaju veličina je 1 + 5 = 6.

Pretpostavimo da se pri kompilaciji sljedeći program naziva temp:

#include
pomoću prostora imena std;
int glavni (int argc, char ** argv)

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

Ovdje imajte na umu da je niz "char * argv [argc]" deklariran kao "char ** argv".

Ako se ovaj program izvodi s naredbom terminala,

./ temp članci 3 olovka za knjige "velika kuća"

tada bi izlaz bio:

./ temp, članci, 3, knjiga, olovka, velika kuća

Imajte na umu da je put do direktorija uključen s imenom izvršne datoteke.

Također, imajte na umu da tijekom izvođenja programa (pozivanje programa) vrijednost za argc nije poslana.

Zaključak

Klasa iostream ima četiri važna objekta koji su cout, cin, cerr i clog. cin je ulazni objekt, dok su ostatak izlazni objekti. Dok se program izvodi, ulaz u program razlikuje se od vremena kada program treba pokrenuti. Kad se program počne izvoditi, ulaz u program pridružuje se naredbom za pokretanje programa, odvojen razmacima.

Besplatni i otvoreni kodni pokretački programi za razvoj Linux igara
Ovaj će članak pokriti popis besplatnih i open source pokretačkih igara koje se mogu koristiti za razvoj 2D i 3D igara na Linuxu. Brojni su takvi moto...
Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...