Konsooli haldamine iostreami klassidega C ++

Managing Console With Iostream Classes C



Arvutustehnikas on konsool arvuti klaviatuur ja arvutimonitor. Varem saadeti väljund otse monitori ekraanile, mitte monitoril kuvatavasse aknasse. Tavalise arvutikasutaja jaoks ei kasuta tänapäeval rakendused kuvarit selgesõnaliselt. Need rakendused kasutavad monitoril kuvatavaid aknaid. Arvutiprogrammeerija peab siiski monitori ekraani kasutama. Kuigi programmeerija peab endiselt monitori ekraani kasutama, ei luba operatsioonisüsteem tal seda teha. Operatsioonisüsteem pakub akent, mis simuleerib monitori ekraani. Windowsi operatsioonisüsteemis nimetatakse seda akent käsuviibaks. Linuxi operatsioonisüsteemis ja selle variantides nimetatakse seda akent terminaliks.

Eeldatavasti oskab lugeja juba käsuviiba või terminali kasutada. Selles artiklis selgitatakse, kuidas lugeda klaviatuurilt märke ja stringe ning saata tähemärke ja stringe terminalile (või käsuviibale). Iga C ++ programmeerija peab sellest artiklist teadma.







Klaviatuurilt sisendi ja terminali väljundi saamiseks peab programm alustama järgmiselt:



#kaasake
kasutades nimeruumtundi;

Artikli sisu

Standardse iostreami kitsa voo objektid

Iostreami klass, standardobjektid, cout, cin, cerr ja ummistus on installeeritud ja juba standardraamatukogus. Programmeerija lihtsalt kasutab neid ilma neid uuesti esitamata.



maksma

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





maksma << 'See on väljund.';

cout on standardse raamatukogu väljund iostreami objekt, mis on juba aktiveeritud.<< 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 uuesti kuvatav käsuviip väljundfraasi paremal. See ei lähe järgmisele reale. endl järgmise avalduse lõpus sunnib ekraanil prinditava järgmisele reale:



maksma << 'See on väljund.' <<endl;

endl on eelmääratletud muutuja. Ekraani sisu saab ka järgmisele reale sundida:

maksma << 'See on väljund.' << ' n';

„ N” kasutamisel ei pruugi kõik tekstiridad ekraanile kohe ilmuda. endl viib kogu tekstirida ekraanile.

Märkus: coutile saadetud string on kahekordse jutumärgiga, samas kui saadetud märk on ühe jutumärgiga. Stringide ja märkide seeria saab saata ühes avalduses, igale eelneb<< . All that will appear in one line at the output if ‘ ’ is not in the series.

džinn

cin on standardne iostreami sisendobjekt, mis on juba aktiveeritud ja saadaval standardraamatukogus. Mõelge põhifunktsioonis () järgmisele koodisegmendile:

süsitxt[viiskümmend];
maksma << 'Sisestage sõna ja vajutage sisestusklahvi:' txt;
maksma <<txt<<endl;

Esimene avaldus deklareerib tühja 50 tähemärgi massiivi. Teine lause käsib kasutajal sisestada sõna järgmisel ekraanireal ja vajutada sisestusklahvi. Pange tähele 'endl' kasutamist, mis sunnib kasutajat teksti sisestama ekraani järgmisele reale. Kui kasutaja teksti trükib, kajastub sisestatud tekst ekraanile, kui see siseneb cin -objekti. Pärast sisestusklahvi vajutamist täidetakse koodisegmendi kolmas avaldus. See kolmas lause saadab sisestatud teksti muutujale txt. Sisestatud tekst ei tohiks sel juhul olla pikem kui 50 tähemärki. Pange tähele ekstraheerimisseadme kasutamist, >>. Viimane avaldus kuvab ekraanile sisestatud teksti.

cin võib klaviatuurilt võtta rohkem kui ühe sõna, eraldades need tühikutega. Need sõnad tuleb eraldada erinevatesse muutujatesse. Seda illustreerib järgmine koodisegment:

süsitxt[kakskümmend];
intseda;
hõljumajalga;
maksma << 'Sisestage 3 väärtust ja vajutage sisestusklahvi:' txt>>seda>>jalga;
maksma <<txt<< '' <<seda<< '' <<jalga<<endl;

Pange tähele väidet:

džinn >>txt>>seda>>jalga;

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

üks25 3.6

siis koodisegmendi väljund oleks,

üks25 3.6

cerr

Järgmisel programmil on viga:

#kaasake
kasutades nimeruumtundi;

intpeamine()
{
minu sises;

tagasi 0;
}

Esimene väide main () pole õige. Kui koodi sisaldava faili nimi on temp.cc ja tulemuseks olevat käivitatavat faili nimetatakse tempiks, saadab järgmine käsk g ++ failile kompilaatori tõrketeate error.txt:

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

Kui faili error.txt pole olemas, luuakse see. Pange tähele käsu g ++ 2. osa> error.txt.

Ekraan on standardväljundi sihtkoht ja see on ka standardvea sihtkoht. Kui 2> error.txt jäetakse käsust g ++ välja, saadetakse kompilaatori veateade standardvea sihtkohta, mis on endiselt ekraan (monitor).

Otseobjekt, mis esindab standardset väljundi sihtkohta, on cout. Standardvea sihtkohta esindav voo objekt on cerr. Programmi käitustõrke saab ekraanile saata järgmiselt.

cerr << 'Veateade!' << ' n';

ummistama

Rakendus võtab eri aegadel erinevaid sisendeid. Kõiki sisendeid saab uuesti ekraanile kuvada. Kõik sisendid saab salvestada faili. See on metsaraie. Tavaline logimise sihtkoht on ekraan. Tavaline logimisvoo objekt on ummistus. Järgmine kood kuvab sisestatud teksti uuesti ekraanile:

süsitxt[viiskümmend];
maksma<<'Sisestage tekst ja vajutage sisestusklahvi:'txt;
ummistama<<txt<<endl;

Kui sisendtekst on 'input_text', kuvab ummistus ekraanile uuesti 'input_text'.

Praktikas suunatakse logimine tavaliselt faili. Seda illustreerib järgmine programm:

#kaasake
kasutades nimeruumtundi;

intpeamine()
{
vabalt avatud( 'log.txt','sisse',stdout);

maksma << 'input_text' <<endl;
}

Pange tähele funktsiooni freopen () ja selle argumentide kasutamist. Selle esimene argument on logifaili nimi. Kui faili pole olemas, luuakse see. Selle teine ​​argument on 'kirjutama' 'w'. Selle kolmas argument on standardväljundi stdout. Funktsiooni main () teine ​​avaldus kasutab logi teksti failile saatmiseks cout. Märkus: Tegelikku sisendkoodi pole selles programmis näidatud.

Märkide ja stringide hankimine klaviatuurilt

Kui kasutaja sisestust sisestab, saadetakse märgid sisendvoo puhvrisse ja kuvatakse ekraanil. Kui kasutaja vajutab sisestusklahvi, on kõik märgid puhvris; samuti liigub kursor ekraanil oleva järgmise rea algusesse. Seejärel jätkab programm pärast sisendlugemislauset järgmise programmi avalduse juurde.

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

Esimese tegelase lugemine

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

süsich;
maksma << 'Sisesta tekst:' <<endl;
džinn.saada(ch);
maksma <<ch<<endl;

Esimene lause deklareerib märgi ilma määramata. Teine lause käsib kasutajal sisestada märgi. Kui kasutaja trükib märgi ja vajutab sisestusklahvi, kopeerib kolmas lause märgi sisendvoo puhvrist muutujat, ch.

Isegi kui kasutaja sisestaks rohkem kui ühe märgi, võtaks koodisegment esimese märgi.

saada ():
get () ilma argumentideta tagastab kümnendkoha ASCII koodi. Mõelge järgmisele koodilõigule:

maksma << 'Sisesta tekst:' <<endl;
maksma << džinn.saada() <<endl;

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

get (char_type* s, streamream n)

Pärast seda, kui kasutaja on sisestanud fraasi ja vajutanud sisestusklahvi, saab cin voo puhvrist eraldada mitu esimest tähemärki. Kasutada saab järgmist koodi:

süsilk[10];
maksma << 'Sisesta tekst:' <<endl;
džinn.saada(str,10);
maksma <<lk<<endl;

Kui sisendiks on 'suurepärased inimesed', on väljundiks 'suurepärane peo', 9 tähemärki ja mitte 10. String NUL -märk ( 0) võtab argumendis get kümnenda positsiooni. Niisiis, selleks, et stris oleks 9 märki, peab selle mälumaht olema vähemalt 10 ja argument get () 11. Kui soovitakse kogu sisendrida, peab stringi salvestusnumber olema vähemalt number trükitud tähemärkidest pluss 1. Seega, kui kogu rea jaoks on kirjutatud 12 tähemärki, peaks stringi (str) salvestusruumi suurus olema 13 ja argumendi get () puhul 13. Pange tähele, et üks tühik loetakse üheks märgiks.

get (char_type* s, streamams n, char_type delim)
Paremal piiritletud alamstringi on võimalik välja võtta konkreetse märgi esmakordsel esinemisel või alamstringi voogesituse suurusel, mis kunagi tuleb. Kui järgmise koodi sisestustekst on suurepärased inimesed, eraldatakse suurepärane:

süsilk[30];
maksma << 'Sisesta tekst:' <<endl;
džinn.saada(str,6,'või');
maksma <<lk<<endl;

Algusest kuues positsioon on tühik ja see piirab ainult ekstraheeritud alamstringi. Kuues positsioon on esikohal ainsa märgi “o” ees. Pange tähele, et str -i mälumaht võib olla nii suur kui võimalik.

Kui järgmise koodi sisestustekst on suurepärased inimesed, eraldatakse gr:

süsilk[30];
maksma << 'Sisesta tekst:' <<endl;
džinn.saada(str,10,'Ja');
maksma <<lk<<endl;

Esimene „e” esinemine tuleb enne kümnendat positsiooni.

Joone kõigi tegelaste hankimine

Pärast sisestusklahvi vajutamist saab kõik reale sisestatud märgid hankida, nagu on näidatud järgmises koodis:

maksma << 'Sisesta tekst:' <<endl;
samas (1) {
süsich= (süsi)džinn.saada();
maksma <<ch;
kui (ch== ' n')
murda;
}

Valamine (char) abil teisendab iga kümnendkoha vastavaks ASCII märgiks.

piiluma ()

Funktsioonid get () ei loe ainult järgmist tähemärki; nad eemaldavad selle voo puhvrist. Kuid funktsioon peek () loeb lihtsalt järgmise märgi (alustades esimesest) ilma seda puhvrist eemaldamata. Järgnevas koodis loeb iga märk enne peek () funktsiooni eemaldamist funktsiooni get () abil. Kõik, mis juhtub pärast seda, kui kasutaja vajutab sisestusklahvi:

maksma << 'Sisesta tekst:' <<endl;
samas (1) {
süsich= (süsi)džinn.piiluma();
maksma <<ch;
džinn.saada();
kui (ch== ' n')
murda;
}

Kui järgmisi märke ei eemaldaks get (), loeks peek () ainult esimest märki ja tsükkel kordub lõputult.

Märkide kuvamine ja kustutamine enne sisestusklahvi vajutamist

Pange tähele, et cin -objekti puhul tuleb enne toimingu tegemist vajutada sisestusklahvi. Noh, on võimalik, et enne sisestusklahvi vajutamist kuvatakse märke trükkimise ja kustutamise ajal. See aga tähendab liidestamist operatsioonisüsteemiga. Operatsioonisüsteemid on erinevad. Seega tähendab see erinevate operatsioonisüsteemide jaoks erinevat kodeerimist. Seega väärib see teema hoopis teistsugust õpetust - vaata hiljem.

Märkide ja stringide saatmine monitorile

Cout -objekt on väljundvoo objekt, mis on juba aktiveeritud ja olemas C ++ standardraamatukogus. cout on peamine objekt, mida kasutatakse tähemärkide ja stringide monitorile saatmisel. 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 ‘ ’ or endl is encountered.

Väljendid, mille tulemuseks on skalaarid, võivad olla sisestusoperaatori jaoks argumendid. Operaator teisendab skalaari tekstiks ja paigutab teksti kaasobjekti voogu. Kui tekst saadetakse cout -objektile, ilmub see tavaliselt ekraanile (monitorile). Kuid mõnikord ei pruugi see kohe ilmuda. Teksti ekraanile sundimiseks sisestage vahetult pärast teksti sisestamist eriväärtus endl. See toob teksti teksti ekraanile ja lisatakse uus rida. Märkus. „ N” lisab lihtsalt uue rea, kuid ei vii teksti ekraanile.

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

#kaasake
kasutades nimeruumtundi;

intpeamine()
{
intseda= 5;
hõljumajalga= 63,5;
maksma << 'The' <<seda<< 'esemed maksavad $' <<jalga<< 'USA.' <<endl;

tagasi 0;
}

Väljund on:

The5esemed maksavad $63,5USA.

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

#kaasake
kasutades nimeruumtundi;

struktuuriSt.{
süsilk[üksteist] = 'mõned sõnad';
}obj;

intpeamine()
{
maksma <<obj.lk << ' n';

tagasi 0;
}

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

Argumendid C ++ programmi kohta

Programmi täitmine algab põhifunktsioonist (). Põhifunktsioonil () on tegelikult kaks valikulist parameetrit. Funktsiooni main () süntaks koos valikuliste parameetritega on järgmine:

intpeamine(intargc,süsi *argv[argc])
{

tagasi 0;
}

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

artiklid3raamatupliiats'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, iga argument on string. suur maja on jutumärkides, sest see on fraas. Selle programmi käivitamiseks oleks terminali käsk järgmine:

./ajutised artiklid3raamatupliiats'suur maja'

Eeldusel, et faili temp on kodukataloogis. Pange tähele, et argumendid eraldavad tühikud, 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] stringide näpunäidete massiiv. Selle massiivi esimese väärtuse aadressil argv [0] annab kompilaator. See on kursor programmi faili nimele. Ülejäänud väärtused viitavad programmi argumentidele kasutaja järjekorras. Selle massiivi suurus on argc. Sel juhul on suurus 1 + 5 = 6.

Oletame, et kompileerimisel nimetatakse järgmist programmi temp:

#kaasake
kasutades nimeruumtundi;

intpeamine(intargc,süsi**argv)
{

maksma <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

tagasi 0;
}

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

Kui see programm käivitatakse terminali käsuga,

./ajutised artiklid3raamatupliiats'suur maja'

siis oleks väljund järgmine:

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

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

Samuti pange tähele, et programmi käitamise ajal (programmi kutsumine) pole argc väärtust saadetud.

Järeldus

Iostreami klassil on neli olulist objekti, mis on cout, cin, cerr ja ummistus. cin on sisendobjekt, ülejäänud on väljundobjektid. Programmi töötamise ajal erineb programmi sisend programmi käivitamise ajast. Kui programm käivitub, ühendatakse programmi sisend programmi käivitamise käsuga, eraldades need tühikutega.