C ++

Upravljanje konzole z razredi iostream v jeziku C ++

Upravljanje konzole z razredi iostream v jeziku C ++

Pri 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 običajnega uporabnika računalnika aplikacije danes 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 ve, kako uporabljati ukazni poziv ali terminal. V tem članku je razloženo, kako berete znake in nize s tipkovnice ter pošiljate znake in nize na terminal (ali ukazni poziv). Vsak programer za C ++ mora vedeti v tem članku.

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

#include
uporaba imenskega prostora std;

Vsebina članka

  • Objekti ozkega toka standardne iostream
  • Pridobivanje znakov in nizov s tipkovnice
  • Prikaz in brisanje znakov, preden pritisnete Enter
  • Pošiljanje znakov in nizov na monitor
  • Argumenti za program C ++
  • Zaključek

Objekti ozkega toka standardne iostream

Razred iostream, standardni predmeti, cout, cin, cerr in clog, so bili ustvarjeni in že v standardni knjižnici. Programer jih preprosto uporabi, ne da bi jih znova ustvaril.

cout

Naslednji stavek v funkciji main () pošlje besedilo: »To je izhod."Do terminala:

cout << "This is output.";

cout je izhodni objekt iostream v standardni knjižnici, ki je že instantiran. << 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 zgornjim stavkom se na desni strani izhodne fraze prikaže ponovno prikazan ukazni poziv. Ne gre v naslednjo vrstico. "Endl" na koncu naslednje izjave bo vse tiskano na zaslonu potisnil v naslednjo vrstico:

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

"Endl" je vnaprej določena spremenljivka. Vsebino zaslona lahko prav tako premaknete v naslednjo vrstico z:

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

Z uporabo '\ n' se vse vrstice besedila še vedno ne bodo takoj pojavile na zaslonu. "Endl" splakne celotno vrstico besedila na zaslon.

Opomba: niz, poslan coutu, je v dvojnih narekovajih, medtem ko je poslani znak v enojnih narekovajih. V enem stavku je mogoče poslati vrsto nizov in znakov, pred katerimi je << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin je standardni vhodni objekt iostream, ki je že instantiran in na voljo v standardni knjižnici. Razmislite o naslednjem segmentu kode v glavni () funkciji:

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

Prvi stavek 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 vnese besedilo, se vneseno besedilo odzvanja na zaslon, medtem ko gre v predmet cin. Po pritisku na Enter se izvede tretji stavek v segmentu kode. Ta tretji stavek pošlje vneseno besedilo spremenljivki txt. V tem primeru vneseno besedilo ne sme biti daljše od 50 znakov. Upoštevajte uporabo operaterja ekstrakcije, >>. Zadnja izjava na zaslonu prikaže vneseno besedilo.

cin lahko s tipkovnice vzame več besed, ločenih s presledki. Te besede bo treba izluščiti v različne spremenljivke. To ponazarja naslednji segment kode:

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

Upoštevajte izjavo:

cin >> txt >> it >> ft;

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

ena 25 3.6

potem bi bil izhodni del kodnega segmenta,

ena 25 3.6

cerr

Naslednji program ima napako:

#include
uporaba imenskega prostora std;
int main ()

v myInt;
vrnitev 0;

Prva izjava v main () ni pravilna. Če je ime datoteke s kodo »temp.cc "in nastala izvršljiva datoteka naj se imenuje" temp ", nato pa bo naslednji ukaz g ++ poslal datoteki sporočilo o napaki prevajalnika," error.txt ":

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

Če datoteka »napaka.txt «ne obstaja, ustvarjen bi bil. Upoštevajte del »2> napaka.txt «ukaza g ++.

Zaslon je standardni cilj izhoda in je tudi standardni cilj napake. Če je »2> napaka.txt «je izpuščen iz ukaza g ++, potem bi se sporočilo o napaki prevajalnika poslalo na standardni cilj napake, ki je še vedno zaslon (monitor).

Objekt toka, ki predstavlja standardni izhodni cilj, je cout. Objekt toka, ki predstavlja standardni cilj napake, je cerr. Napaka med izvajanjem programa se lahko na zaslon pošlje na naslednji način:

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

zamaši

Aplikacija ima različne vnose ob različnih časih. Vse vhode je mogoče znova prikazati na zaslonu. Vse vnose lahko shranite v datoteko. To je beleženje. Standardni cilj beleženja je zaslon. Standardni objekt toka dnevnika je zamašitev. Naslednja koda bo ponovno prikazala vnosno besedilo na zaslon:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
zamaši<Če je vhodno besedilo "input_text", bo zamašitev znova prikazala "input_text" na zaslonu.

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

#include
uporaba imenskega prostora std;
int main ()

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

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

Pridobivanje znakov in nizov s tipkovnice

Medtem ko uporabnik tipka vnos, se znaki pošljejo v medpomnilnik vhodnega toka in prikažejo na zaslonu. Ko uporabnik pritisne tipko Enter, so vsi znaki v medpomnilniku; tudi kazalec gre na začetek naslednje vrstice spodaj, na zaslonu. Nato se program nadaljuje na naslednjo izjavo programa po izjavi o vhodnem branju.

Objekt cin ima metode, s katerimi se ukvarja ta razdelek.

Branje prvega znaka

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

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

Prvi stavek razglasi znak brez dodelitve. Drugi stavek uporabniku naroči, naj vnese znak. Ko uporabnik vpiše znak in pritisne tipko Enter, tretji stavek kopira znak iz vmesnega pomnilnika vhodnega toka v spremenljivko ch.

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

get ():
get () brez argumenta, vrne decimalno kodo ASCII. Upoštevajte naslednji segment kode:

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

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

get (char_type * s, streamsize n)

Ko uporabnik vnese besedno zvezo in pritisne tipko Enter, lahko iz vmesnega pomnilnika cin stream izvleče več znakov, ki se začnejo od prvega. Uporabi se lahko naslednja koda:

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

Če je vnos "odlični ljudje", bo izhod "odličen človek" z 9 znaki in ne 10. Znak NUL v nizu (\ 0) zavzame deseti položaj v argumentu get. Torej, da ima 9 znakov v str, mora biti njegova velikost pomnilnika vsaj 10, argument get () pa mora biti 11. Če je zaželena celotna vnosna vrstica, mora biti število shrambe niza vsaj število vpisanih znakov in 1. Torej, če je 12 znakov vnesenih za celotno vrstico, 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)
Izvleči je mogoče podniz, omejen na desni strani, s prvim pojavljanjem določenega znaka ali s povečanjem pretoka podniza, ki je kdaj koli prej. Če je vhodno besedilo za naslednjo kodo "odlični ljudje", bo izvlečeno "super":

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

Šesti položaj od začetka je presledek in omejuje izključeno izvlečeni podniz. Šesti položaj je na prvem mestu pred edinim znakom, "o". Velikost pomnilnika za str je lahko čim večja.

Če je vhodno besedilo za naslednjo kodo "odlični ljudje", bo izpisano "gr":

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

Prvi pojav 'e' je najprej pred deseto pozicijo.

Pridobivanje vseh znakov črte

Po pritisku na tipko Enter lahko vse znake, vnesene v vrstico, dobite, kot je prikazano v naslednji kodi:

cout << "Input text:" << endl;
medtem ko (1)
char ch = (char) cin.get ();
cout << ch;
če (ch == '\ n')
odmor;

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

pokukati ()

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

cout << "Input text:" << endl;
medtem ko (1)
char ch = (char) cin.pokukati ();
cout << ch;
cin.get ();
če (ch == '\ n')
odmor;

Če naslednjih znakov ne bi odstranil get (), bi peek () bral samo prvi znak in zanka se bo ponavljala neomejeno.

Prikaz in brisanje znakov, preden pritisnete Enter

Upoštevajte, da je treba pri predmetu cin pritisniti tipko Enter, preden začnete ukrepati. No, možno je, da se znaki prikažejo med tipkanjem in brisanjem, 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 vajo - glej kasneje.

Pošiljanje znakov in nizov na monitor

Objekt cout je objekt izhodnega toka, ki je že ustvarjen in prisoten v standardni knjižnici C ++. cout je glavni objekt, ki se uporablja pri pošiljanju znakov in nizov na monitor. To se naredi z vstavnim operaterjem, << . 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, ki povzročijo skalarje, so lahko argumenti za operater vstavljanja. Operater pretvori skalar v besedilo in besedilo postavi v tok predmeta cout. Ko je besedilo poslano predmetu cout, se običajno prikaže na zaslonu (monitorju). Vendar se občasno morda ne pojavi takoj. Če želite prisiliti besedilo na zaslon, vstavite posebno vrednost, "endl", takoj po vstavitvi besedila. To bo povzročilo, da se besedilo splakne na zaslon in doda nova vrstica. Opomba: '\ n' preprosto doda novo vrstico, vendar besedila ne splakne na zaslon.

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

#include
uporaba imenskega prostora std;
int main ()

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

Rezultat je:

5 predmetov stane 63 USD.5 ZDA.

Naslednji program prikazuje, kako se natisne niz predmeta, ustvarjenega iz razreda:

#include
uporaba imenskega prostora std;
struct St
char str [11] = "nekaj besed";
obj;
int main ()

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

Rezultat je "nekaj besed".

Argumenti za program C ++

Izvajanje programa se začne z glavno () funkcijo. Funkcija main () ima dejansko dva neobvezna parametra. Sintaksa funkcije main () z neobveznimi parametri je:

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

vrnitev 0;

Predpostavimo, da je ime izvršljive datoteke C ++ "temp". Predpostavimo, da so argumenti, ki jih program potrebuje iz okolja (operacijskega sistema), ki ga vnese uporabnik,,

članki 3 knjižno pero "velika hiša"

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

Vsako je besedilo. Oštevilčen argument programa je besedilo. Z drugimi besedami, vsak argument je niz. "Velika hiša" je v narekovajih, ker je besedna zveza. Terminalni ukaz za zagon tega programa bi bil:

./ temp članki 3 knjižno pero "velika hiša"

Ob predpostavki, da je temp datoteke 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 obstaja 5 argumentov za program. Torej, argc je 6. V sintaksi je argv [argc] niz kazalcev na nize. Prvo vrednost za to polje v argv [0] poda prevajalnik. Je kazalec na ime programske datoteke. Preostale vrednosti so kazalci na programske argumente v uporabnikovem vrstnem redu. Velikost te matrike je argc. V tem primeru je velikost 1 + 5 = 6.

Predpostavimo, da je pri prevajanju naslednji program imenovan temp:

#include
uporaba imenskega prostora std;
int main (int argc, char ** argv)

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

Tukaj upoštevajte, da je bila matrika "char * argv [argc]" razglašena za "char ** argv".

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

./ temp članki 3 knjižno pero "velika hiša"

potem bi bil izhod:

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

Upoštevajte, da je bila pot do imenika vključena v ime izvršljive 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, ostali pa izhodni predmeti. Med izvajanjem programa se vhod v program razlikuje od trenutka, ko naj bi se program začel izvajati. Ko se program začne izvajati, se vhod v program združi z ukazom za zagon programa, ločen s presledki.

Zaslonska sledilna ploščica in kazalec miške AppyMouse za tablične računalnike Windows
Uporabniki tabličnih računalnikov pogosto zgrešijo miškin kazalec, še posebej kadar običajno uporabljajo prenosne računalnike. Pametni telefoni in tab...
Srednji gumb miške ne deluje v sistemu Windows 10
The srednji gumb miške vam pomaga, da se pomikate po dolgih spletnih straneh in zaslonih z veliko podatkov. Če se to ustavi, boste na koncu uporabili ...
Kako spremeniti levi in ​​desni gumb miške na računalniku z operacijskim sistemom Windows 10
Povsem normalno je, da so vse naprave računalniške miške ergonomsko zasnovane za desničarje. Na voljo pa so miške, ki so posebej zasnovane za levičarj...