Konsolin hallinta C ++: n iostream -luokilla

Managing Console With Iostream Classes C



Laskennassa konsoli on tietokoneen näppäimistö ja tietokoneen näyttö. Aiemmin tulostus lähetettiin suoraan monitorin näyttöön eikä monitorissa näkyvään ikkunaan. Tavalliselle tietokoneen käyttäjälle nykyiset sovellukset eivät käytä näyttöä nimenomaisesti. Nämä sovellukset käyttävät näytössä näkyviä ikkunoita. Tietokoneohjelmoijan on kuitenkin edelleen käytettävä monitorinäyttöä. Vaikka ohjelmoijan on edelleen käytettävä monitorinäyttöä, käyttöjärjestelmä ei salli hänen tehdä sitä. Käyttöjärjestelmässä on ikkuna, joka simuloi näyttöä. Windows -käyttöjärjestelmässä tätä ikkunaa kutsutaan komentokehotteeksi. Linux -käyttöjärjestelmässä ja sen muunnelmissa tätä ikkunaa kutsutaan terminaaliksi.

Odotetaan, että lukija osaa jo käyttää komentoriviä tai päätelaitetta. Tässä artikkelissa kerrotaan, kuinka voit lukea merkkejä ja merkkijonoja näppäimistöltä ja lähettää merkkejä ja merkkijonoja päätelaitteeseen (tai komentokehotteeseen). Jokaisen C ++ -ohjelmoijan on tiedettävä tässä artikkelissa.





Ohjelman on aloitettava seuraavista tavoista saadakseen näppäimistöltä syötteen ja päätelaitteelle ulostulon:



#sisältää
käyttämällä nimiavaruustuntia;

Artikkelin sisältö

Vakio -iostreamin kapeat stream -objektit

Iostream -luokka, vakio -objektit, cout, cin, cerr ja clog, on luotu ja jo vakiokirjastossa. Ohjelmoija käyttää niitä vain ilman uudelleenasennusta.



kustannus

Seuraava main () -funktion lause lähettää tekstin Tämä tulostuu. terminaaliin:





kustannus << 'Tämä on lähtö.';

cout on tulostettu iostream -objekti vakiokirjastossa, joka on jo luotu.<< 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.

Yllä olevan lausunnon kanssa uudelleen näytetty komentokehote tulee tulostuslauseen oikealle puolelle. Se ei siirry seuraavalle riville. seuraavan lauseen lopussa oleva endl pakottaa näytön tulostamat tiedot seuraavalle riville:



kustannus << 'Tämä on lähtö.' <<endl;

endl on ennalta määritetty muuttuja. Näytön sisältö voidaan myös pakottaa seuraavalle riville:

kustannus << 'Tämä on lähtö.' << '' n'';

Jos käytät n -näppäintä, kaikki tekstirivit eivät välttämättä näy näytöllä heti. endl tyhjentää koko tekstirivin näytölle.

Huomautus: coutille lähetetty merkkijono on lainausmerkeissä, kun taas lähetetty merkki on lainausmerkeissä. Joukko merkkijonoja ja merkkejä voidaan lähettää yhdessä lausekkeessa, jota edeltää jokainen<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin on vakio -iostream -syöttöobjekti, joka on jo luotu ja saatavilla vakiokirjastossa. Harkitse pääkoodin () funktiossa seuraavaa koodisegmenttiä:

hiiltyätxt[viisikymmentä];
kustannus << 'Kirjoita sana ja paina Enter:' txt;
kustannus <<txt<<endl;

Ensimmäinen lause ilmoittaa tyhjän 50 merkin sarjan. Toinen lause kehottaa käyttäjää kirjoittamaan sanan seuraavalle näyttöriville ja painamalla Enter -näppäintä. Huomaa 'endl': n käyttö, joka pakottaa käyttäjän kirjoittamaan tekstiä näytön seuraavalle riville. Kun käyttäjä kirjoittaa tekstiä, syötetty teksti toistetaan näytölle, kun se menee cin -objektiin. Enter -näppäimen painamisen jälkeen koodisegmentin kolmas lause suoritetaan. Tämä kolmas lause lähettää syötetyn tekstin muuttujaan txt. Tässä tapauksessa syötetyn tekstin pituus saa olla enintään 50 merkkiä. Huomaa poistolaitteen käyttö, >>. Viimeinen lause näyttää syötetyn tekstin näytöllä.

cin voi ottaa näppäimistöltä useamman kuin yhden sanan välilyönnillä erotettuna. Nämä sanat on purettava eri muuttujiin. Seuraava koodisegmentti havainnollistaa tätä:

hiiltyätxt[kaksikymmentä];
intse;
kelluaft;
kustannus << 'Anna 3 arvoa ja paina Enter:' txt>>se>>ft;
kustannus <<txt<< '' <<se<< '' <<ft<<endl;

Huomaa väite:

gin >>txt>>se>>ft;

Ensimmäinen sana puretaan txt -tiedostoon, seuraava sen viereen ja viimeinen ft. Jos syöte oli,

yksi25 3.6

silloin koodisegmentin tuotos olisi,

yksi25 3.6

cerr

Seuraavassa ohjelmassa on virhe:

#sisältää
käyttämällä nimiavaruustuntia;

inttärkein()
{
inInt;

palata 0;
}

Main (): n ensimmäinen lause ei ole oikea. Jos koodin sisältävän tiedoston nimi on temp.cc ja tuloksena olevaa suoritettavaa tiedostoa kutsutaan nimellä temp, seuraava g ++ -komento lähettää kääntäjän virheilmoituksen tiedostoon error.txt:

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

Jos tiedosto error.txt ei ole olemassa, se luodaan. Huomaa g ++ -komennon osa 2> error.txt.

Näyttö on vakiotulostuskohde ja se on myös vakiovirhekohde. Jos 2> error.txt jätetään pois g ++ -komennosta, kääntäjän virheilmoitus lähetetään vakiovirhekohteeseen, joka on edelleen näyttö (monitori).

Vakiokohdetta edustava stream -objekti on cout. Standardivirhekohtaa edustava stream -objekti on cerr. Ohjelman ajonaikainen virhe voidaan lähettää näytölle seuraavasti:

cerr << 'Virheilmoitus!' << '' n'';

tukkia

Sovellus ottaa erilaisia ​​syötteitä eri aikoina. Kaikki tulot voidaan näyttää uudelleen näytöllä. Kaikki tulot voidaan tallentaa tiedostoon. Tämä on kirjaamista. Vakio kirjauskohde on näyttö. Tavallinen kirjausvirtaobjekti on tukos. Seuraava koodi näyttää syötetyn tekstin uudelleen näytölle:

hiiltyätxt[viisikymmentä];
kustannus<<'Kirjoita teksti ja paina Enter:'txt;
tukkia<<txt<<endl;

Jos syötetty teksti on 'input_text', tukkeuma näyttää 'input_text' uudelleen näytöllä.

Käytännössä kirjaaminen ohjataan yleensä tiedostoon. Seuraava ohjelma havainnollistaa tätä:

#sisältää
käyttämällä nimiavaruustuntia;

inttärkein()
{
vapaana( 'log.txt','sisään',stdout);

kustannus << 'sijoita teksti' <<endl;
}

Huomaa funktion freopen () käyttö ja sen argumentit. Sen ensimmäinen argumentti on lokitiedoston nimi. Jos tiedostoa ei ole, se luodaan. Sen toinen argumentti on 'w' 'kirjoittaa'. Sen kolmas argumentti on vakio-ulostulon stdout. Main () -funktion toinen lause käyttää cout -tiedostoa lähettämään lokitekstin tiedostoon. Huomautus: Todellista syöttökoodia ei ole näytetty tässä ohjelmassa.

Merkkien ja merkkijonojen hakeminen näppäimistöltä

Kun käyttäjä kirjoittaa tuloa, merkit lähetetään syöttövirran puskuriin ja näytetään näytöllä. Kun käyttäjä painaa Enter -näppäintä, kaikki merkit ovat puskurissa; myös kohdistin siirtyy seuraavan rivin alkuun ruudulla. Ohjelma jatkaa sitten seuraavaan ohjelmalausumaan syötteen lukulausekkeen jälkeen.

Cin -objektilla on menetelmiä, joita tämä osio koskee.

Ensimmäisen hahmon lukeminen

get (char_type & c):
Seuraava koodisegmentti näyttää ensimmäisen merkin lukemisen syöttövirran puskurista:

hiiltyäch;
kustannus << 'Sijoita teksti:' <<endl;
gin.saada(ch);
kustannus <<ch<<endl;

Ensimmäinen lause ilmoittaa merkin ilman tehtävää. Toinen lause käskee käyttäjän syöttämään merkin. Kun käyttäjä kirjoittaa merkin ja paina Enter -näppäintä, kolmas lause kopioi merkin syöttövirran puskurista muuttujaan ch.

Vaikka käyttäjä kirjoittaisi useamman kuin yhden merkin, koodisegmentti ottaisi ensimmäisen merkin.

saada():
get () ilman argumenttia, palauttaa desimaalisen ASCII -koodin. Harkitse seuraavaa koodisegmenttiä:

kustannus << 'Sijoita teksti:' <<endl;
kustannus << gin.saada() <<endl;

Jos syöte on 'asdfg', palautetaan 97, joka on desimaalinen ASCII -koodi 'a': lle.

get (char_type* s, streamream n)

Kun käyttäjä on syöttänyt lauseen ja painanut Enter -näppäintä, cin -stream -puskurista voidaan poimia useita merkkejä ensimmäisestä alkaen. Seuraavaa koodia voidaan käyttää:

hiiltyäs[10];
kustannus << 'Sijoita teksti:' <<endl;
gin.saada(str,10);
kustannus <<s<<endl;

Jos syöte on 'mahtavia ihmisiä', tulos on 'suuri peo', 9 merkkiä eikä 10. Merkkijono NUL -merkki ( 0) on kymmenes sija get -argumentissa. Joten jotta merkkijonossa on 9 merkkiä, sen tallennustilan on oltava vähintään 10 ja get () -argumentin on oltava 11. Jos koko syöttörivi halutaan, merkkijonon tallennusnumeron on oltava vähintään numero kirjoitetuista merkeistä plus 1. Joten jos koko riville kirjoitetaan 12 merkkiä, numeron tulisi olla 13 merkkijonon (str) tallennustilan koolle ja 13 get () -argumentille. Huomaa, että yksi välilyönti lasketaan yhdeksi merkkiksi.

get (char_type* s, streamamsize n, char_type delim)
On mahdollista poimia oikealle rajattu alimerkkijono tietyn merkin ensimmäisellä esiintymisellä tai alijonon suoratoistokoolla, joka tulee ensin. Jos seuraavan koodin syöttöteksti on hienoja ihmisiä, loistava poistetaan:

hiiltyäs[30];
kustannus << 'Sijoita teksti:' <<endl;
gin.saada(str,6,'tai');
kustannus <<s<<endl;

Kuudes sija alusta alkaen on välilyönti, ja se rajoittaa erotetun alimerkkijonon yksinomaan. Kuudes sija tulee ensimmäisenä ennen ainoaa merkkiä 'o'. Huomaa, että str -tallennustilan koko voi olla mahdollisimman suuri.

Jos seuraavan koodin syöttöteksti on hienoja ihmisiä, gr poimitaan:

hiiltyäs[30];
kustannus << 'Sijoita teksti:' <<endl;
gin.saada(str,10,'Ja');
kustannus <<s<<endl;

Ensimmäinen ”e” esiintyy ensin ennen kymmenettä sijaa.

Kaikkien rivin merkkien saaminen

Enter -näppäimen painamisen jälkeen kaikki riville kirjoitetut merkit voidaan saada seuraavan koodin mukaisesti:

kustannus << 'Sijoita teksti:' <<endl;
sillä aikaa (1) {
hiiltyäch= (hiiltyä)gin.saada();
kustannus <<ch;
jos (ch== '' n'')
tauko;
}

Valinta merkillä (char) muuntaa jokaisen desimaaliluvun vastaavaksi ASCII -merkiksi.

kurkistaa()

Get () -jäsentoiminnot eivät ainoastaan ​​lue seuraavaa merkkiä; ne poistavat sen virtauspuskurista. Peek () -jäsenfunktio lukee kuitenkin yksinkertaisesti seuraavan merkin (ensimmäisestä alkaen) poistamatta sitä puskurista. Seuraavassa koodissa get () -funktio lukee jokaisen merkin ensin peek () -funktiolla ennen sen poistamista. Kaikki mitä tapahtuu sen jälkeen, kun käyttäjä on painanut Enter -näppäintä:

kustannus << 'Sijoita teksti:' <<endl;
sillä aikaa (1) {
hiiltyäch= (hiiltyä)gin.kurkistaa();
kustannus <<ch;
gin.saada();
jos (ch== '' n'')
tauko;
}

Jos get () ei poista seuraavia merkkejä, peek () lukee vain ensimmäisen merkin ja silmukka toistuu loputtomiin.

Merkkien näyttäminen ja poistaminen ennen Enter -näppäimen painamista

Huomaa, että CIN -objektin kanssa Enter -näppäintä on painettava ennen kuin toiminto suoritetaan. On mahdollista, että merkkejä voidaan näyttää kirjoittamisen ja poistamisen aikana ennen Enter -näppäimen painamista. Tämä tarkoittaa kuitenkin liitäntää käyttöjärjestelmään. Käyttöjärjestelmät eroavat toisistaan. Tämä tarkoittaa siis erilaista koodausta eri käyttöjärjestelmille. Joten tämä aihe ansaitsee aivan erilaisen opetusohjelman - katso myöhemmin.

Merkkien ja merkkijonojen lähettäminen näyttöön

Cout -objekti on lähtövirran objekti, joka on jo luotu ja joka on C ++ -standardikirjastossa. cout on pääkohde, jota käytetään merkkien ja merkkijonojen lähettämiseen näyttöön. Tämä tehdään lisäysoperaattorilla,<< . 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.

Lausekkeet, jotka johtavat skalaareihin, voivat olla argumentteja lisäysoperaattorille. Operaattori muuntaa skalaarin tekstiksi ja sijoittaa tekstin cout -objektivirtaan. Kun teksti lähetetään cout -objektiin, se näkyy normaalisti näytössä (monitorissa). Joskus se ei kuitenkaan välttämättä näy heti. Jos haluat pakottaa tekstin näyttöön, lisää erikoisarvo endl heti tekstin lisäämisen jälkeen. Tämä aiheuttaa sen, että teksti huuhdellaan näytölle ja uusi rivi lisätään. Huomautus: ' n' lisää vain uuden rivin, mutta ei huuhtele tekstiä ruudulle.

Seuraava ohjelma näyttää, kuinka int-, float- ja tavallisen tekstin arvot tulostetaan näytölle:

#sisältää
käyttämällä nimiavaruustuntia;

inttärkein()
{
intse= 5;
kelluaft= 63.5;
kustannus << '' <<se<< 'tavarat maksavat $' <<ft<< 'USA.' <<endl;

palata 0;
}

Lähtö on:

The5tavarat maksavat $63.5MEILLE.

Seuraava ohjelma näyttää, kuinka luokasta luotavan objektin merkkijono tulostetaan:

#sisältää
käyttämällä nimiavaruustuntia;

rakenneSt{
hiiltyäs[yksitoista] = 'joitain sanoja';
}obj;

inttärkein()
{
kustannus <<obj.s << '' n'';

palata 0;
}

Tulos on 'joitakin sanoja'.

Argumentteja C ++ -ohjelmalle

Ohjelman suorittaminen alkaa päätoiminnosta (). Päätoiminnolla () on itse asiassa kaksi valinnaista parametria. Main () -funktion syntaksi valinnaisten parametrien kanssa on:

inttärkein(intargc,hiiltyä *argv[argc])
{

palata 0;
}

Oletetaan, että suoritettavan C ++ -tiedoston nimi on väliaikainen. Oletetaan, että käyttäjän kirjoittamat argumentit, joita ohjelma tarvitsee ympäristöstään (käyttöjärjestelmästä), ovat

artikkeleita3kirjakynä'iso talo'

Tässä on 5 argumenttia: artikkelit, 3, kirja, kynä ja iso talo

Jokainen on tekstiä. Ohjelman numeroitu argumentti on teksti. Toisin sanoen jokainen argumentti on merkkijono. iso talo on lainausmerkeissä, koska se on lause. Pääteohjelma tämän ohjelman suorittamiseksi olisi:

./väliaikaiset artikkelit3kirjakynä'iso talo'

Olettaen, että tiedoston lämpötila on kotihakemistossa. Huomaa, että argumentit erottavat välilyönnit eikä pilkkuja.

Funktion syntaksissa () funktio argc on ohjelman argumenttien määrä plus 1. Tässä tapauksessa ohjelmalle on 5 argumenttia. Joten argc on 6. Syntaksissa argv [argc] on merkkijonojen osoittimien joukko. Ensimmäisen arvon tälle matriisille kohdassa argv [0] antaa kääntäjä. Se on osoitin ohjelmatiedoston nimeen. Loput arvot ovat osoittimia ohjelman argumentteihin käyttäjän kirjoittamassa järjestyksessä. Tämän taulukon koko on argc. Tässä tapauksessa koko on 1 + 5 = 6.

Oletetaan, että kokoamisen aikana seuraavan ohjelman nimi on temp:

#sisältää
käyttämällä nimiavaruustuntia;

inttärkein(intargc,hiiltyä**argv)
{

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

palata 0;
}

Huomaa, että taulukko 'char*argv [argc]' on ilmoitettu nimellä 'char ** argv'.

Jos tämä ohjelma suoritetaan terminaalikomennolla,

./väliaikaiset artikkelit3kirjakynä'iso talo'

sitten lähtö olisi:

./lämpötila, artikkelit,3, kirja, kynä, iso talo

Huomaa, että hakemistopolku on sisällytetty suoritettavan tiedoston nimeen.

Huomaa myös, että ohjelman käynnissä (ohjelman kutsuminen) argc -arvoa ei ole lähetetty.

Johtopäätös

Iostream -luokassa on neljä tärkeää objektia, jotka ovat cout, cin, cerr ja clog. cin on syöttöobjekti, kun taas loput ovat lähtöobjekteja. Kun ohjelma on käynnissä, ohjelmaan syötetty tieto on erilainen kuin silloin, kun ohjelma käynnistetään. Kun ohjelma alkaa toimia, ohjelmaan syötetty tieto yhdistetään ohjelman suorituskomentoon välilyönnillä erotettuna.