Upravljanje konzole z razredi iostream v C ++

Managing Console With Iostream Classes C



V računalništvu je konzola računalniška tipkovnica in računalniški monitor. V preteklosti je bil izhod poslan neposredno na zaslon monitorja in ne v okno, prikazano na monitorju. Za navadne uporabnike računalnikov današnje aplikacije monitorja ne uporabljajo izrecno. Te aplikacije uporabljajo okna, prikazana na monitorju. Vendar mora računalniški programer še vedno uporabljati zaslon monitorja. Čeprav mora programer še vedno uporabljati zaslon monitorja, mu operacijski sistem tega ne dovoljuje. Operacijski sistem ponuja okno, ki simulira zaslon monitorja. V operacijskem sistemu Windows se to okno imenuje ukazni poziv. V operacijskem sistemu Linux in njegovih različicah se to okno imenuje terminal.

Pričakuje se, da bralec že zna uporabljati ukazni poziv ali terminal. Ta članek pojasnjuje, kako berete znake in nize s tipkovnice ter jih pošiljate v terminal (ali ukazni poziv). Vsak programer C ++ mora vedeti v tem članku.







Za vnos s tipkovnice in izhod na terminal mora program začeti z:



#vključi
z uporabo imenski prostorure;

Vsebina članka

Predmeti ozkega toka standardnega iotoka

Razred iostream, standardni predmeti, cout, cin, cerr in clog, so nastali in so že v standardni knjižnici. Programer jih preprosto uporablja, ne da bi jih znova namestil.



stroški

Naslednji stavek v funkciji main () pošlje besedilo, This is output. do terminala:





stroški << 'To je izhod.';

cout je izhodni iostream objekt v standardni knjižnici, ki je že izdelan.<< 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.

Z zgornjo izjavo se znova prikaže ukazni poziv na desni strani izhodne fraze. Ne gre v naslednjo vrstico. endl na koncu naslednje izjave bo prisilil tisto, kar zaslon natisne, v naslednjo vrstico:



stroški << 'To je izhod.' <<endl;

endl je vnaprej določena spremenljivka. Vsebino zaslona lahko tudi prisilite v naslednjo vrstico z:

stroški << 'To je izhod.' << ' n';

Z uporabo ' n' se vse vrstice besedila morda še vedno ne prikažejo takoj na zaslonu. endl izbriše celotno vrstico besedila na zaslon.

Opomba: niz, poslan v cout, je v dvojnih narekovajih, poslani znak pa v enojnih narekovajih. Niz nizov in znakov je mogoče poslati v enem stavku, vsakemu pred njim<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin je standardni vhodni objekt iostream, ki je že izdelan in na voljo v standardni knjižnici. Upoštevajte naslednji segment kode v funkciji main ():

chartxt[petdeset];
stroški << 'Vnesite besedo in pritisnite Enter:' txt;
stroški <<txt<<endl;

Prva izjava razglasi prazno polje s 50 znaki. Drugi stavek naroči uporabniku, naj v naslednjo vrstico zaslona vnese besedo in pritisne tipko Enter. Upoštevajte uporabo »endl«, ki uporabnika prisili, da vnese besedilo v naslednjo vrstico zaslona. Ko uporabnik tipka besedilo, se vneseno besedilo odmeva na zaslon, medtem ko gre v predmet cin. Ko pritisnete Enter, se izvede tretji stavek v kodnem segmentu. Ta tretji stavek pošlje vneseno besedilo spremenljivki txt. Vneseno besedilo v tem primeru ne sme biti daljše od 50 znakov. Upoštevajte uporabo operatorja ekstrakcije, >>. Zadnja izjava prikazuje vneseno besedilo na zaslonu.

cin lahko s tipkovnice vzame več besed, ločenih s presledki. Te besede bo treba izvleči v različne spremenljivke. Naslednji segment kode ponazarja to:

chartxt[dvajset];
intto;
plavatift;
stroški << 'Vnesite 3 vrednosti in pritisnite Enter:' txt>>to>>ft;
stroški <<txt<< '' <<to<< '' <<ft<<endl;

Upoštevajte izjavo:

gin >>txt>>to>>ft;

Prva beseda je izvlečena v txt, poleg nje in zadnja v ft. Če je bil vnos,

ena25 3.6

potem bi bil izhod po kodnem segmentu,

ena25 3.6

cerr

Naslednji program ima napako:

#vključi
z uporabo imenski prostorure;

intglavni()
{
v mojem;

vrnitev 0;
}

Prva trditev v main () ni pravilna. Če je ime datoteke s kodo temp.cc in nastalo izvedljivo datoteko imenoval temp, potem naslednji ukaz g ++ pošlje datoteki sporočilo o napaki prevajalnika, error.txt:

g++ -o temp temp.DC 2>napaka.txt

Če datoteka error.txt ne obstaja, bi bila ustvarjena. Upoštevajte del 2> error.txt ukaza g ++.

Zaslon je standardni izhodni cilj in je tudi standardni cilj napake. Če 2> error.txt izpustite iz ukaza g ++, bo sporočilo o napaki prevajalnika poslano na standardni naslov napake, ki je še vedno zaslon (monitor).

Objekt toka, ki predstavlja standardni izhodni cilj, je cout. Predmetni tok, ki predstavlja standardni cilj napake, je cerr. Napako med izvajanjem programa lahko pošljete na zaslon na naslednji način:

cerr << 'Sporočilo o napaki!' << ' n';

zamaši

Aplikacija ob različnih časih sprejema različne vnose. Vsi vhodi se lahko znova prikažejo na zaslonu. Vse vnose lahko shranite v datoteko. To je beleženje. Standardni cilj beleženja je zaslon. Standardni objekt pretočnega dnevnika je zamašen. Naslednja koda bo znova prikazala vneseno besedilo na zaslon:

chartxt[petdeset];
stroški<<'Vnesite besedilo in pritisnite Enter:'txt;
zamaši<<txt<<endl;

Če je vhodno besedilo 'input_text', bi se na zaslonu znova prikazalo 'input_text'.

V praksi se beleženje običajno preusmeri v datoteko. Naslednji program to ponazarja:

#vključi
z uporabo imenski prostorure;

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

stroški << 'input_text' <<endl;
}

Upoštevajte uporabo funkcije, freopen () in njene argumente. Njegov prvi argument je ime datoteke dnevnika. Če datoteka ne obstaja, bi bila ustvarjena. Njegov drugi argument je 'w' za 'write'. Njegov tretji argument je stdout za standardni izhod. Drugi stavek v funkciji main () uporablja cout za pošiljanje besedila za beleženje v datoteko. Opomba: Dejanska vnosna koda v tem programu ni prikazana.

Pridobivanje znakov in nizov s tipkovnice

Medtem ko uporabnik vnaša vnos, se znaki pošljejo v medpomnilnik vhodnega toka in prikažejo na zaslonu. Ko uporabnik pritisne tipko Enter, so vsi znaki v medpomnilniku; kazalec gre tudi na začetek naslednje vrstice spodaj, na zaslonu. Program nato nadaljuje z naslednjim stavkom programa po stavku branja vnosa.

Objekt cin ima metode, o katerih govori ta razdelek.

Branje prvega znaka

get (char_type & c):
Naslednji kodni segment prikazuje, kako prebrati prvi znak iz medpomnilnika vhodnega toka:

charpogl;
stroški << 'Vnos besedila:' <<endl;
gin.dobiti(pogl);
stroški <<pogl<<endl;

Prva izjava razglasi znak brez dodelitve. Druga izjava pove uporabniku, naj vnese znak. Ko uporabnik vnese znak in pritisne tipko Enter, tretji stavek kopira znak iz medpomnilnika vhodnega toka v spremenljivko, pogl.

Tudi če bi uporabnik vnesel več kot en znak, bi prvi kod prevzel segment kode.

get ():
get () brez argumenta, vrne decimalno kodo ASCII. Razmislite o naslednjem segmentu kode:

stroški << 'Vnos besedila:' <<endl;
stroški << gin.dobiti() <<endl;

Če je vnos 'asdfg', se vrne 97, kar je decimalna koda ASCII za 'a'.

get (char_type* s, streamsize n)

Ko uporabnik vnese frazo in pritisne tipko Enter, lahko iz medpomnilnika cin stream izvleče številne znake, ki se začnejo od prvega. Uporabite lahko naslednjo kodo:

charstr[10];
stroški << 'Vnos besedila:' <<endl;
gin.dobiti(str,10);
stroški <<str<<endl;

Če je vnos 'odlični ljudje', bo izhod 'velik peo', z 9 znaki in ne 10. Znak NUL niza ( 0) zavzame deseto mesto v argumentu get. Torej, če ima 9 znakov v str, mora biti njegova velikost shranjevanja najmanj 10, argument get () pa 11. Če je zaželena celotna vnosna vrstica, mora biti številka shrambe niza vsaj številka vnesenih znakov, plus 1. Torej, če je za celotno vrstico vpisanih 12 znakov, mora biti število 13 za velikost shrambe niza (str) in 13 za argument get (). Upoštevajte, da se en presledek šteje kot en znak.

get (char_type* s, streamsize n, char_type delim)
Možno je izvleči podniz, razmejen na desni, ob prvem pojavljanju določenega znaka ali po velikosti toka podniz, ki je kdaj na prvem mestu. Če je vnos besedila v naslednjo kodo odličen, potem bi bilo ekstrahirano odlično:

charstr[30];
stroški << 'Vnos besedila:' <<endl;
gin.dobiti(str,6,'ali');
stroški <<str<<endl;

Šesti položaj na začetku je presledek, ki izključno omejuje izvlečeni podniz. Šesto mesto je pred edinim znakom, 'o'. Upoštevajte, da je lahko prostor za shranjevanje str čim večji.

Če je vnos besedila v naslednjo kodo odličen, potem bi bil izvlečen gr:

charstr[30];
stroški << 'Vnos besedila:' <<endl;
gin.dobiti(str,10,'In');
stroški <<str<<endl;

Prvi pojav 'e' je prvi pred desetim mestom.

Pridobivanje vseh likov črte

Ko pritisnete tipko Enter, lahko vse znake, vnesene v vrstico, dobite, kot je prikazano v naslednji kodi:

stroški << 'Vnos besedila:' <<endl;
medtem (1) {
charpogl= (char)gin.dobiti();
stroški <<pogl;
če (pogl== ' n')
prekiniti;
}

Ulivanje z (char) pretvori vsako decimalno število v ustrezen znak ASCII.

pokukati ()

Funkcije člana get () ne berejo samo naslednjega znaka; ga odstranijo iz medpomnilnika toka. Vendar pa članska funkcija peek () preprosto prebere naslednji znak (začenši od prvega), ne da bi ga odstranila iz vmesnega pomnilnika. V naslednji kodi funkcija get () najprej odstrani vsak znak s funkcijo peek (), preden ga odstrani. Vse, kar se zgodi, ko uporabnik pritisne tipko Enter:

stroški << 'Vnos besedila:' <<endl;
medtem (1) {
charpogl= (char)gin.pokukati();
stroški <<pogl;
gin.dobiti();
če (pogl== ' n')
prekiniti;
}

Če naslednji znaki ne bi bili odstranjeni s funkcijo get (), bi peek () bral samo prvi znak, zanka pa se bo ponavljala v nedogled.

Prikaz in brisanje znakov, preden pritisnete Enter

Upoštevajte, da je treba pri predmetu cin pritisniti tipko Enter, preden se izvede dejanje. No, med tipkanjem in brisanjem je mogoče prikazati znake, preden pritisnete tipko Enter. Vendar to pomeni povezovanje z operacijskim sistemom. Operacijski sistemi se razlikujejo. Torej to pomeni različno kodiranje za različne operacijske sisteme. Torej si ta tema zasluži povsem drugačno vadbo - glej kasneje.

Pošiljanje znakov in nizov na monitor

Objekt cout je objekt izhodnega toka, ki je že naveden in prisoten v standardni knjižnici C ++. cout je glavni predmet za pošiljanje znakov in nizov na monitor. To se naredi z operaterjem vstavljanja,<< . 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, ki imajo za posledico skalarje, so lahko argumenti za operater vstavljanja. Operater pretvori skalar v besedilo in ga postavi v tok objektov cout. Ko se besedilo pošlje na predmet cout, se običajno prikaže na zaslonu (monitorju). Vendar se občasno morda ne pojavi takoj. Če želite besedilo vsiliti na zaslon, vnesite posebno vrednost, endl, tik po vstavitvi besedila. To bo povzročilo, da se besedilo izbriše na zaslon, dodana pa bo nova vrstica. Opomba: ' n' preprosto doda novo vrstico, vendar ne izbriše besedila na zaslon.

Naslednji program prikazuje, kako natisniti vrednosti int, float in navadnega besedila na zaslon:

#vključi
z uporabo imenski prostorure;

intglavni()
{
intto= 5;
plavatift= 63,5;
stroški << 'The' <<to<< 'predmeti stanejo $' <<ft<< 'ZDA.' <<endl;

vrnitev 0;
}

Izhod je:

The5predmeti stanejo $63,5ZDA.

Naslednji program prikazuje, kako se natisne niz predmeta, ki je nastal iz razreda:

#vključi
z uporabo imenski prostorure;

structSt.{
charstr[enajst] = 'nekaj besed';
}obj;

intglavni()
{
stroški <<obj.str << ' n';

vrnitev 0;
}

Izhod je 'nekaj besed'.

Argumenti za program C ++

Izvajanje programa se začne s funkcijo main (). Funkcija main () ima dejansko dva izbirna parametra. Sintaksa funkcije main () z izbirnimi parametri je:

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

vrnitev 0;
}

Predpostavimo, da je ime izvedljive datoteke C ++ temp. Predpostavimo, da so argumenti, ki jih program potrebuje iz svojega okolja (operacijskega sistema), ki jih je vnesel uporabnik,

člankov3knjižno pero'velika hiša'

Tukaj je 5 argumentov: članki, 3, knjiga, pero in velika hiša

Vsak je besedilo. Oštevilčeni argument programa je besedilo. Z drugimi besedami, vsak argument je niz. velika hiša je v narekovajih, ker je fraza. Ukaz terminala za zagon tega programa bi bil:

./začasni članki3knjižno pero'velika hiša'

Ob predpostavki, da je datoteka v domačem imeniku. Upoštevajte, da presledki in ne vejice ločujejo argumente.

Zdaj je v sintaksi funkcije main () argc število argumentov programa plus 1. V tem primeru je za program 5 argumentov. Torej je argc 6. V sintaksi je argv [argc] niz kazalcev na nize. Prvo vrednost za to polje pri argv [0] poda prevajalnik. To je kazalec na ime programske datoteke. Preostale vrednosti so kazalci na argumente programa v vnesenem uporabniškem vrstnem redu. Velikost tega niza je argc. V tem primeru je velikost 1 + 5 = 6.

Predpostavimo, da se pri sestavi naslednji program imenuje temp:

#vključi
z uporabo imenski prostorure;

intglavni(intargc,char**argv)
{

stroški <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

vrnitev 0;
}

Upoštevajte, da je bila matrika 'char*argv [argc]' deklarirana kot 'char ** argv'.

Če se ta program zažene z ukazom terminala,

./začasni članki3knjižno pero'velika hiša'

potem bi bil rezultat:

./temp, članki,3, knjiga, pisalo, velika hiša

Upoštevajte, da je pot imenika vključena v ime izvedljive datoteke.

Upoštevajte tudi, da pri izvajanju programa (klicanje programa) vrednost za argc ni bila poslana.

Zaključek

Razred iostream ima štiri pomembne predmete, ki so cout, cin, cerr in clog. cin je vhodni objekt, preostali pa izhodni. Med izvajanjem programa se vnos v program razlikuje od začetka izvajanja programa. Ko se program začne izvajati, se vhod v program združi z ukazom za zagon programa, ločen s presledki.