Upravljanje konzolom s iostream klasama u C ++

Managing Console With Iostream Classes C



U računarstvu konzola je tipkovnica računala i monitor računala. U prošlosti se izlaz slao izravno na zaslon monitora, a ne u prozor prikazan na monitoru. Za običnog korisnika računala današnje aplikacije ne koriste monitor izričito. Ove aplikacije koriste prozore prikazane na monitoru. Međutim, računalni programer još uvijek mora koristiti zaslon monitora. Iako programer još uvijek mora koristiti zaslon monitora, operacijski sustav mu to ne dopušta. Operacijski sustav nudi prozor koji simulira zaslon monitora. U operacijskom sustavu Windows ovaj se prozor naziva naredbeni redak. U operacijskom sustavu Linux i njegovim varijantama 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 C ++ programer mora znati u ovom članku.







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



#uključi
koristeći imenski prostorsati;

Sadržaj članka

Objekti uskog toka standardnog iostreama

Iostream klasa, standardni objekti, cout, cin, cerr i clog, instancirani su i već su u standardnoj biblioteci. Programer ih samo koristi bez ponovne instalacije.



trošak

Sljedeća naredba u funkciji main () šalje tekst: Ovo je izlaz. do terminala:





trošak << 'Ovo je izlaz.';

cout je izlazni iostream objekt u standardnoj biblioteci, već instaliran.<< 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 pojavljuje se desno od izlazne fraze. Ne ide na sljedeći redak. endl na kraju sljedeće naredbe natjerat će sve što je ispisano na zaslon u sljedeći redak:



trošak << 'Ovo je izlaz.' <<endl;

endl je unaprijed definirana varijabla. Sadržaj zaslona također se može prisiliti na sljedeći redak sa:

trošak << 'Ovo je izlaz.' << ' n';

Upotrebom znaka ‘ n’ svi se redovi teksta možda neće odmah pojaviti na zaslonu. endl pušta čitavu liniju teksta na zaslon.

Napomena: niz poslan u cout nalazi se u dvostrukim navodnicima, dok se znak koji se šalje nalazi u jednostrukim 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 ‘ ’ is not in the series.

džin

cin je standardni iostream ulazni objekt, već instaliran i dostupan u standardnoj biblioteci. Uzmite u obzir sljedeći segment koda u funkciji main ():

chartxt[pedeset];
trošak << 'Unesite riječ i pritisnite Enter:' txt;
trošak <<txt<<endl;

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

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

chartxt[dvadeset];
intto;
plutatift;
trošak << 'Unesite 3 vrijednosti i pritisnite Enter:' txt>>to>>ft;
trošak <<txt<< '' <<to<< '' <<ft<<endl;

Obratite pažnju na izjavu:

džin >>txt>>to>>ft;

Prva riječ se izdvaja u txt, pored nje, a posljednja u ft. Ako je unos bio,

jedan25 3.6

tada bi izlaz po segmentu koda bio,

jedan25 3.6

cerr

Sljedeći program ima grešku:

#uključi
koristeći imenski prostorsati;

intglavni()
{
u mojem;

povratak 0;
}

Prva izjava u main () nije točna. Ako je naziv datoteke s kodom temp.cc, a rezultirajuću izvršnu datoteku nazvati temp, tada će sljedeća g ++ naredba poslati datoteku greške prevoditelja, error.txt:

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

Ako datoteka error.txt ne postoji, bit će kreirana. Zabilježite dio 2> error.txt naredbe g ++.

Zaslon je standardno odredište izlaza, a ujedno je i odredište standardne pogreške. Ako je 2> error.txt izostavljeno iz naredbe g ++, tada bi se poruka o pogrešci prevoditelja poslala na standardno odredište pogreške, koje je i dalje zaslon (monitor).

Objekt toka koji predstavlja standardno izlazno odredište je cout. Objekt toka koji predstavlja standardno odredište pogreške je cerr. Pogreška tijekom izvođenja programa može se poslati na zaslon na sljedeći način:

cerr << 'Poruka o pogrešci!' << ' n';

začepiti

Aplikacija uzima različite unose u različito vrijeme. Svi se ulazi mogu ponovno prikazati na ekranu. Svi se ulazi mogu spremiti u datoteku. Ovo je zapisivanje. Standardno odredište bilježenja je zaslon. Standardni objekt toka bilježenja je začepljen. Sljedeći kôd će ponovno prikazati uneseni tekst na ekranu:

chartxt[pedeset];
trošak<<'Unesite tekst i pritisnite Enter:'txt;
začepiti<<txt<<endl;

Ako je ulazni tekst 'input_text', tada bi clog ponovno prikazao 'input_text' na ekranu.

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

#uključi
koristeći imenski prostorsati;

intglavni()
{
freopen( 'log.txt','u',stdout);

trošak << 'input_text' <<endl;
}

Obratite pozornost na uporabu funkcije, freopen () i njene argumente. Njegov prvi argument je naziv log datoteke. Ako datoteka ne postoji, bit će kreirana. Njegov drugi argument je 'w' za 'write'. Njegov treći argument je stdout za standardni izlaz. Drugi izraz u funkciji main () koristi cout za slanje teksta zapisnika u datoteku. Napomena: Stvarni ulazni kod nije prikazan u ovom programu.

Dobivanje znakova i nizova s ​​tipkovnice

Dok korisnik upisuje unos, znakovi se šalju u međuspremnik ulaznog toka i prikazuju se na ekranu. Kada korisnik pritisne tipku Enter, svi su znakovi u međuspremniku; također, kursor ide na početak sljedećeg retka ispod, na ekranu. Program zatim nastavlja na sljedeću naredbu programa, nakon naredbe za čitanje unosa.

Cin objekt ima metode o kojima se radi u ovom odjeljku.

Čitanje prvog lika

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

charCH;
trošak << 'Ulazni tekst:' <<endl;
džin.dobiti(CH);
trošak <<CH<<endl;

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

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

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

trošak << 'Ulazni tekst:' <<endl;
trošak << džin.dobiti() <<endl;

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

get (char_type* s, streamsize n)

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

charstr[10];
trošak << 'Ulazni tekst:' <<endl;
džin.dobiti(str,10);
trošak <<str<<endl;

Ako je unos 'veliki ljudi', izlaz će biti 'veliki peo', od 9 znakova, a ne 10. NULL znaka niza ( 0) zauzima deseto mjesto u argumentu get. Dakle, da bi imao 9 znakova u str -u, njegova memorijska veličina mora biti najmanje 10, a argument get () mora biti 11. Ako se želi cijeli ulazni red, tada broj pohrane niza mora biti barem broj upisanih znakova, plus 1. Dakle, ako je za cijeli redak upisano 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.

get (char_type* s, streamsize n, char_type delim)
Moguće je izdvojiti podniz, razgraničen s desne strane, prvim pojavljivanjem određenog znaka ili veličinom toka podniza, koja je uvijek prva. Ako su ulazni tekst u sljedeći kôd sjajni ljudi, tada će se izvući sjajno:

charstr[30];
trošak << 'Ulazni tekst:' <<endl;
džin.dobiti(str,6,'ili');
trošak <<str<<endl;

Šesta pozicija od početka je razmaknica i ona isključivo ograničava izdvojeni podniz. Šesto mjesto dolazi prvo ispred jedinog znaka, 'o'. Imajte na umu da veličina memorije za str može biti što veća.

Ako su ulazni tekst u sljedeći kôd sjajni ljudi, tada će se izvući gr:

charstr[30];
trošak << 'Ulazni tekst:' <<endl;
džin.dobiti(str,10,'I');
trošak <<str<<endl;

Prva pojava 'e' dolazi prva prije desete pozicije.

Dobivanje svih likova crte

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

trošak << 'Ulazni tekst:' <<endl;
dok (1) {
charCH= (char)džin.dobiti();
trošak <<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 toka. Međutim, funkcija člana peek () simple čita sljedeći znak (počevši od prvog) bez uklanjanja iz međuspremnika. U sljedećem kodu svaki znak prvo se čita s funkcijom peek () prije nego što se ukloni, pomoću funkcije get (). Sve se događa nakon što korisnik pritisne tipku Enter:

trošak << 'Ulazni tekst:' <<endl;
dok (1) {
charCH= (char)džin.zaviriti();
trošak <<CH;
džin.dobiti();
ako (CH== ' n')
pauza;
}

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

Prikaz i brisanje znakova prije pritiska na Enter

Uočite da s cin objektom tipku Enter morate pritisnuti prije nego što dođe do 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. Operacijski sustavi se razlikuju. Dakle, to znači različito kodiranje za različite operacijske sustave. Dakle, ova tema zaslužuje potpuno drugačiji vodič - pogledajte kasnije.

Slanje znakova i nizova na monitor

Objekt cout je objekt izlaznog toka, već nastao i prisutan u standardnoj biblioteci C ++. cout je glavni objekt koji se koristi za slanje znakova i nizova na monitor. To se radi pomoću operatora 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 ‘ ’ or endl is encountered.

Izrazi koji rezultiraju skalarima mogu biti argumenti za operator umetanja. Operater pretvara skalar u tekst i stavlja tekst u tok cout objekta. Kada se tekst pošalje na objekt cout, obično se pojavljuje na ekranu (monitoru). Međutim, povremeno se možda neće pojaviti odmah. Da biste prisilno unijeli tekst na zaslon, umetnite posebnu vrijednost, endl, neposredno nakon umetanja teksta. To će uzrokovati da se tekst izbaci na zaslon, a dodat će se novi redak. Napomena: ‘ n’ jednostavno dodaje novi redak, ali ne ispire tekst na zaslon.

Sljedeći program prikazuje kako ispisati vrijednosti int, float i običnog teksta na zaslon:

#uključi
koristeći imenski prostorsati;

intglavni()
{
intto= 5;
plutatift= 63.5;
trošak << 'The' <<to<< 'artikli koštaju $' <<ft<< 'SAD'. <<endl;

povratak 0;
}

Izlaz je:

The5stavke koštaju $63.5NAS.

Sljedeći program prikazuje kako se ispisuje niz objekta koji je izveden iz klase:

#uključi
koristeći imenski prostorsati;

structSv{
charstr[jedanaest] = 'neke riječi';
}obj;

intglavni()
{
trošak <<obj.str << ' n';

povratak 0;
}

Ispis je 'neke riječi'.

Argumenti za C ++ program

Izvođenje programa počinje od funkcije main (). Funkcija main () zapravo ima dva izborna parametra. Sintaksa funkcije main () s izbornim parametrima je:

intglavni(intargc,char *argv[argc])
{

povratak 0;
}

Pretpostavimo da je naziv izvršne C ++ datoteke temp. Pretpostavimo da su argumenti koje program treba iz svog okruženja (operativnog sustava), a koje je upisao korisnik,

članci3olovka za knjige'velika kuća'

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

Svaki je tekst. Numerirani argument programa je tekst. Drugim riječima, svaki argument je niz. velika kuća je pod navodnicima jer je to fraza. Naredba terminala za pokretanje ovog programa bila bi:

./privremeni članci3olovka za knjige'velika kuća'

Pretpostavimo da je temp datoteke u matičnom direktoriju. Imajte na umu da razmaci, a ne zarezi odvajaju argumente.

Sada, u sintaksi funkcije main (), argc je 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 prevoditelj. To je pokazivač na naziv programske datoteke. Ostale vrijednosti su pokazivači na programske argumente u upisanim korisničkim redoslijedom. Veličina ovog niza je argc. U ovom slučaju veličina je 1 + 5 = 6.

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

#uključi
koristeći imenski prostorsati;

intglavni(intargc,char**argv)
{

trošak <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

povratak 0;
}

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

Ako se ovaj program pokreće s naredbom terminala,

./privremeni članci3olovka za knjige'velika kuća'

tada bi izlaz bio:

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

Imajte na umu da je put direktorija uključen u naziv izvršne datoteke.

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

Zaključak

Iostream klasa ima četiri važna objekta koji su cout, cin, cerr i clog. cin je ulazni objekt, dok su ostali izlazni objekti. Dok je program pokrenut, ulaz u program razlikuje se od vremena početka programa. Kad se program pokrene, ulaz u program se pridružuje naredbom za pokretanje programa, odvojenu razmacima.