C ++

Konsooli haldamine iostream-klassidega C ++ -s

Konsooli haldamine iostream-klassidega C ++ -s

Arvutamisel on konsooliks arvuti klaviatuur ja arvutimonitor. Varem saadeti väljund otse monitori ekraanile, mitte ekraanil kuvatud aknasse. Tavalise arvutikasutaja jaoks ei kasuta rakendused monitori selgesõnaliselt. Need rakendused kasutavad ekraanil kuvatavaid aknaid. Kuid arvutiprogrammeerija peab ikkagi kasutama monitori ekraani. Kuigi programmeerija peab ikkagi monitori ekraani kasutama, ei luba operatsioonisüsteem tal seda teha. Operatsioonisüsteem pakub akna, mis simuleerib monitori ekraani. Windowsi operatsioonisüsteemis nimetatakse seda akent käsuviibaks. Linuxi operatsioonisüsteemis ja selle variantides nimetatakse seda akent terminaliks.

Eeldatakse, et lugeja teab juba käsuviiba või terminali kasutada. Selles artiklis selgitatakse, kuidas klaviatuurilt märke ja stringe lugeda ning märke ja stringe terminali (või käsuviibale) saata. Selles artiklis peab teadma iga C ++ programmeerija.

Klaviatuurilt sisendi ja terminali väljundi saamiseks peab programm algama järgmisega:

# kaasata
nimeruumi kasutamine std;

Artikli sisu

  • Tavalise iostreami kitsad vooobjektid
  • Tähemärkide ja stringide hankimine klaviatuurilt
  • Märkide kuvamine ja kustutamine enne sisestusklahvi vajutamist
  • Tähemärkide ja stringide saatmine monitorile
  • Argumendid C ++ programmi jaoks
  • Järeldus

Standardse iostreami kitsad vooobjektid

Iostreami klass, standardobjektid, cout, cin, cerr ja clog, on instantsitud ja on juba standardraamatukogus. Programmeerija kasutab neid lihtsalt uuesti näitamata.

cout

Funktsiooni main () järgmine lause saadab teksti: „See on väljund.Terminali:

cout << "This is output.";

cout on standardse teegi väljund-iostreami objekt, mis on juba instantsitud. << 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.

Ülaltoodud avaldusega kuvatakse väljundfraasi paremal uuesti kuvatud käsuviip. See ei lähe järgmisele reale. Järgmise lause lõpus olev “endl” sunnib kõik, mida ekraan trükib, järgmisele reale:

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

“Endl” on ettemääratud muutuja. Ekraani sisu saab sundida järgmisele reale ka järgmiselt:

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

'\ N' kasutamisel ei pruugi kõik tekstiread ikkagi kohe ekraanile ilmuda. “Endl” loputab kogu teksti rea ekraanile.

Märkus: coutile saadetud string on topelt jutumärkides, samas kui saadetud märk on jutumärkides. Rida stringe ja tähemärke saab saata ühes avalduses, millest igaühele eelneb << . All that will appear in one line at the output if '\n' is not in the series.

tina

cin on standardne iostreami sisendobjekt, juba instantsitud ja saadaval standardses teegis. Mõelge funktsioonis main () järgmisele koodisegmendile:

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

Esimene lause deklareerib tühja 50 tähemärgi massiivi. Teine lause käsib kasutajal tippida järgmisel ekraanireal sõna ja vajutada sisestusklahvi. Pange tähele "endli" kasutamist, mis sunnib kasutajat ekraani järgmisele reale teksti sisestama. Kui kasutaja teksti sisestab, kajas sisestatud tekst ekraanile, kui see läheb cin-objekti. Pärast Enteri vajutamist käivitatakse koodilõigu kolmas lause. See kolmas lause saadab sisestatud teksti muutujale txt. Sisestatud tekst ei tohi sel juhul olla pikem kui 50 tähemärki. Pange tähele kaevandamise operaatori kasutamist >>. Viimane lause kuvab sisestatud teksti ekraanil.

cin võib klaviatuurilt võtta rohkem kui ühe sõna, eraldatuna tühikutega. Need sõnad tuleb eraldada erinevateks muutujateks. Järgmine koodilõik illustreerib seda:

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

Pange tähele lauset:

cin >> txt >> it >> jalad;

Esimene sõna ekstraheeritakse txt-ni, selle kõrval ja viimane ft-ni. Kui sisend oli,

üks 25 3.6

siis oleks väljund koodisegmendi järgi,

üks 25 3.6

cerr

Järgmisel programmil on tõrge:

# kaasata
nimeruumi kasutamine std;
int main ()

in myInt;
tagastama 0;

Maini esimene väide () pole õige. Kui koodiga faili nimi on “temp.cc ”ja sellest tulenevat käivitatavat faili nimetatakse“ temp ”, siis järgmine käsk g ++ saadab kompilaatori tõrketeate failile“ error ”.txt ”:

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

Kui faili „viga.txt ”pole olemas, see oleks loodud. Pange tähele osa „2> viga.txt ”käsust g ++.

Ekraan on standardne väljundsihtkoht ja see on ka tavaline vea sihtkoht. Kui viga „2>.txt ”jäetakse käsust g ++ välja, siis saadetakse kompilaatori tõrketeade standardvea sihtkohta, mis on endiselt ekraan (monitor).

Voogobjekt, mis tähistab standardset väljundsihtkohta, on cout. Vea standardobjekti tähistav vooobjekt on cerr. Programmi käitustõrke saab ekraanile saata järgmiselt:

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

ummistuma

Rakendus võtab erinevatel aegadel erinevaid sisendeid. Kõiki sisendeid saab ekraanil uuesti kuvada. Kõiki sisendeid saab faili salvestada. See on logimine. Tavaline logimise sihtkoht on ekraan. Tavaline logimisvoo objekt on ummistus. Järgmine kood kuvab sisendteksti uuesti ekraanile:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
ummistuma<Kui sisendtekst on "input_text", kuvatakse ummistusel ekraanile uuesti tekst "input_text".

Praktikas suunatakse logimine tavaliselt faili. Järgmine programm illustreerib seda:

# kaasata
nimeruumi kasutamine std;
int main ()

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

Pange tähele funktsiooni freopen () kasutamist ja selle argumente. Selle esimene argument on logifaili nimi. Kui faili pole olemas, siis see luuakse. Selle teine ​​argument on "kirjutamise" jaoks "w". Selle kolmas argument on standardväljundi jaoks stdout. Funktsiooni main () teine ​​lause kasutab logimise teksti faili saatmiseks cout. Märkus: tegelikku sisendkoodi pole selles programmis kuvatud.

Tähemärkide ja stringide hankimine klaviatuurilt

Sel ajal, kui kasutaja sisestab teksti, saadetakse märgid sisendvoo puhvrisse ja kuvatakse ekraanil. Kui kasutaja vajutab klahvi Enter, on kõik märgid puhvris; samuti läheb kursor järgmise rea algusesse, ekraani juurde. Seejärel jätkatakse programmi järgmisele programmilausele, pärast sisendi lugemise avaldust.

Cin-objektil on meetodid, mida see jaotis käsitleb.

Esimese märgi lugemine

get (char_type & c):
Järgmine koodisegment näitab, kuidas esimest märki sisendvoo puhvrist lugeda:

char ch;
cout << "Input text:" << endl;
tina.saada (ch);
cout << ch << endl;

Esimene lause deklareerib märgi ilma omistamiseta. Teine lause käsib kasutajal sisestada märgi. Kui kasutaja sisestab tähemärgi ja vajutab sisestusklahvi, kopeerib kolmas lause märgi sisendvoo puhvrist muutujasse ch.

Isegi kui kasutaja sisestas rohkem kui ühe märgi, võtaks koodisegmendi esimene märk.

saada ():
get () ilma argumendita tagastab kümnendkoha ASCII-koodi. Mõelge järgmisele koodisegmendile:

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

Kui sisend on "asdfg", tagastatakse 97, mis on "a" kümnendkohaline ASCII-kood.

hankima (char_type * s, streamsize n)

Pärast seda, kui kasutaja sisestab fraasi ja vajutab sisestusklahvi, saab cin-voo puhvrist eraldada hulga esimesest algavaid märke. Kasutada saab järgmist koodi:

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

Kui sisendiks on "suured inimesed", siis väljundiks on "suurepärane peo", 9 tähemärki ja mitte 10. Stringi NUL märk (\ 0) võtab argumendis get kümnenda positsiooni. Seega, et stringis oleks 9 tähemärki, peab selle salvestusruumi suurus olema vähemalt 10 ja argument get () olema 11. Kui soovitakse kogu sisendrida, peab stringi salvestusnumber olema vähemalt sisestatud märkide arv pluss 1. Niisiis, kui kogu reale on kirjutatud 12 tähemärki, peaks stringide (str) salvestusmahtu arv olema 13 ja get () argument. Pange tähele, et ühte tühikut arvestatakse ühe märgina.

get (char_type * s, streamsize n, char_type delim)
Parempoolselt piiritletud alamstringi on võimalik eraldada konkreetse märgi esmakordse esinemisega või alamstringi voosuurusega, mis kunagi varem saabub. Kui järgmise koodi sisendtekst on "suured inimesed", siis ekstraheeritakse "suurepärane":

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

Kuues positsioon on algusest peale tühikukujundus ja see piiritleb eraldatud alamstringi eranditult. Kuues positsioon on esimene enne ainsat tähemärki o. Pange tähele, et str-i salvestusmaht võib olla võimalikult suur.

Kui järgmise koodi sisendtekst on "suured inimesed", ekstraheeritakse "gr":

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

Esimene e-täht on esimene enne kümnendat positsiooni.

Rida kõigi märkide hankimine

Pärast klahvi Enter vajutamist saab kõik reale sisestatud tähemärgid, nagu on näidatud järgmises koodis:

cout << "Input text:" << endl;
samas (1)
char ch = (char) tsin.saada ();
cout << ch;
kui (ch == '\ n')
murda;

Valu (char) abil teisendab iga kümnendarvu vastavaks ASCII tähemärgiks.

piiluma ()

Liikme get () funktsioonid ei loe mitte ainult järgmist märki; nad eemaldavad selle voo puhvrist. Peek () -liikme funktsioon simple loeb aga järgmise märgi (alustades esimesest), eemaldamata seda puhvrist. Järgmises koodis loetakse funktsiooni get () abil kõik märgid enne eemaldamist funktsiooniga peek (). Kõik, mis juhtub pärast seda, kui kasutaja vajutab sisestusklahvi:

cout << "Input text:" << endl;
samas (1)
char ch = (char) tsin.piiluma ();
cout << ch;
tina.saada ();
kui (ch == '\ n')
murda;

Kui get () ei eemaldanud järgmisi märke, loeb peek () ainult esimest märki ja silmus kordub lõputult.

Märkide kuvamine ja kustutamine enne sisestusklahvi vajutamist

Pange tähele, et cin-objekti puhul tuleb enne toimingu tegemist vajutada klahvi Enter. Noh, enne sisestusklahvi vajutamist on tähemärke võimalik sisestamise ja kustutamise ajal kuvada. See aga tähendab operatsioonisüsteemiga suhtlemist. Operatsioonisüsteemid erinevad. Seega tähendab see erinevate opsüsteemide erinevat kodeerimist. Nii et see teema väärib hoopis teistsugust õpetust - vaata hiljem.

Tähemärkide ja stringide saatmine monitorile

Cout-objekt on väljundvoo objekt, mis on juba instantsitud ja asub C ++ standardkogus. cout on peamine objekt, mida kasutatakse märkide ja stringide kuvarile saatmiseks. Seda tehakse sisestusoperaatoriga, << . 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.

Väljendid, mille tulemuseks on skalaarid, võivad olla sisestusoperaatori argumendid. Operaator teisendab skalaari tekstiks ja asetab teksti cout-objekti voosse. Kui tekst saadetakse objektile cout, kuvatakse see tavaliselt ekraanil (monitoril). Aeg-ajalt ei pruugi see aga kohe ilmneda. Teksti ekraanile sundimiseks sisestage spetsiaalne väärtus "endl" kohe pärast teksti sisestamist. Selle tulemusel loputatakse tekst ekraanile ja lisatakse uus rida. Märkus. '\ N' lisab lihtsalt uue rea, kuid ei ujuta teksti ekraanile.

Järgmine programm näitab, kuidas int, ujuki ja tavalise teksti väärtused ekraanile printida:

# kaasata
nimeruumi kasutamine std;
int main ()

int see = 5;
ujuk ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
tagastama 0;

Väljund on:

Need 5 eset maksid 63 dollarit.5 USA-d.

Järgmine programm näitab, kuidas klassist kiirendatud objekti string trükitakse:

# kaasata
nimeruumi kasutamine std;
struct St
char str [11] = "mõned sõnad";
obj;
int main ()

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

Väljundiks on "mõned sõnad".

Argumendid C ++ programmi jaoks

Programmi käivitamine algab funktsioonist main (). Funktsioonil main () on tegelikult kaks valikulist parameetrit. Funktsiooni main () süntaks koos valikuliste parameetritega on:

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

tagastama 0;

Oletame, et käivitatava C ++ faili nimi on "temp". Oletame, et argumendid, mida programm oma kasutaja poolt sisestatud keskkonnast (operatsioonisüsteemist) vajab, on,

artiklid 3 raamatupliiats "suur maja"

Siin on 5 argumenti: "artiklid", "3", "raamat", "pastakas" ja "suur maja"

Igaüks neist on tekst. Programmi nummerdatud argument on tekst. Teisisõnu on iga argument string. “Suur maja” on jutumärkides, sest see on fraas. Selle programmi käivitamiseks oleks terminali käsk järgmine:

./ temp artiklid 3 raamatu pliiats "suur maja"

Eeldades, et faili temp asub kodukataloogis. Pange tähele, et argumendid eraldavad tühikud ja mitte komad.

Funktsiooni main () süntaksis on argc programmi argumentide arv pluss 1. Sel juhul on programmi jaoks 5 argumenti. Niisiis, argc on 6. Süntaksis on argv [argc] stringidele osutavate märkide massiiv. Selle massiivi esimese väärtuse argv [0] annab kompilaator. See osutab programmifaili nimele. Ülejäänud väärtused osutavad programmi argumentidele kasutaja sisestatud järjekorras. Selle massiivi suurus on argc. Sel juhul on suurus 1 + 5 = 6.

Oletame, et kompileerimisel nimetatakse järgmist programmi temp:

# kaasata
nimeruumi kasutamine std;
int main (int argc, char ** argv)

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

Pange siin tähele, et massiiv "char * argv [argc]" on deklareeritud kui "char ** argv".

Kui seda programmi käivitatakse terminali käsuga,

./ temp artiklid 3 raamatu pliiats "suur maja"

siis oleks väljund järgmine:

./ temp, artiklid, 3, raamat, sulepea, suur maja

Pange tähele, et kataloogi tee on lisatud käivitatava faili nimega.

Pange tähele ka seda, et programmi käivitamisel (programmi kutsumisel) pole argc väärtust saadetud.

Järeldus

Klassis iostream on neli olulist objekti, mis on cout, cin, cerr ja clog. cin on sisendobjekt, ülejäänud aga väljundobjektid. Programmi töötamise ajal on programmi sisend teistsugune kui programmi käivitamist alustades. Kui programm hakkab töötama, ühendatakse programmi sisend tühikutega eraldatud käsuga programmi käivitamiseks.

Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...
0 A.D. Õpetus
Paljudest strateegiamängudest on 0 A.D. suudab silma paista põhjaliku tiitli ja väga sügava taktikalise mänguna, hoolimata sellest, et see on avatud l...
Unity3D õpetus
Sissejuhatus Unity 3D-sse Unity 3D on võimas mängude arendamise mootor. See on platvormidevaheline, mis võimaldab teil luua mänge mobiilseadmetele, ve...