C ++

Konsolin hallinta iostream-luokilla C ++ ssa

Konsolin hallinta iostream-luokilla C ++ ssa

Laskennassa konsoli on tietokoneen näppäimistö ja tietokoneen näyttö. Aikaisemmin tulos lähetettiin suoraan monitorinäyttöön eikä näytössä näkyvään ikkunaan. Tavalliselle tietokoneen käyttäjälle sovellukset eivät nykyään 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ä näytön näyttöä. Vaikka ohjelmoijan on edelleen käytettävä näytön näyttöä, käyttöjärjestelmä ei salli hänen tehdä sitä. Käyttöjärjestelmä tarjoaa ikkunan, 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 päätelaitteeksi.

Oletetaan, että lukija osaa jo käyttää komentokehotetta tai päätelaitetta. Tässä artikkelissa kerrotaan, kuinka merkkejä ja merkkijonoja luetaan näppäimistöltä ja kuinka merkkejä ja merkkijonoja lähetetään päätelaitteeseen (tai komentokehotteeseen). Jokaisen C ++ -ohjelmoijan on tiedettävä tästä artikkelista.

Saadaksesi syötteen näppäimistöltä ja lähdön päätelaitteelle, ohjelman on aloitettava seuraavasti:

#sisältää
käyttämällä nimitilaa vakio;

Artikkelin sisältö

  • Kapeat Stream-objektit tavallisesta iostreamista
  • Hahmojen ja merkkijonojen hankkiminen näppäimistöltä
  • Merkkien näyttäminen ja poistaminen ennen Enter-painikkeen painamista
  • Merkkien ja merkkijonojen lähettäminen näyttöön
  • Argumentit C ++ -ohjelmalle
  • Johtopäätös

Kapeat Stream-objektit normaalista iostreamista

Iostream-luokka, vakioobjektit, cout, cin, cerr ja clog, on instantisoitu ja jo standardikirjastossa. Ohjelmoija käyttää niitä vain välittämättä niitä uudestaan.

cout

Seuraava main () -funktion lause lähettää tekstin: "Tämä on lähtö.”Terminaaliin:

cout << "This is output.";

cout on lähtökohtainen iostream-objekti standardikirjastossa, joka on jo instantioitu. << 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 lausekkeen avulla uudelleen näytetty komentokehote näkyy lähtölauseen oikealla puolella. Se ei siirry seuraavalle riville. Seuraavan lauseen lopussa oleva "endl" pakottaa kaiken ruudun tulostaman seuraavalle riville:

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

“Endl” on ennalta määritelty muuttuja. Näytön sisältö voidaan myös pakottaa seuraavalle riville:

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

Kun käytetään sanaa '\ n', kaikki tekstirivit eivät välttämättä näy heti näytöllä. “Endl” huuhtelee koko tekstirivin näytölle.

Huomaa: coutille lähetetty merkkijono on lainausmerkeissä, kun taas lähetetty merkki on lainausmerkeissä. Sarja merkkijonoja ja merkkejä voidaan lähettää yhdessä lauseessa, joista jokaista edeltää << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin on standardoitu iostream-syöteobjekti, joka on jo instantioitu ja saatavana vakiokirjastossa. Harkitse seuraavaa koodisegmenttiä main () -funktiossa:

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

Ensimmäisessä lauseessa ilmoitetaan tyhjä 50-merkkinen taulukko. Toinen lause kehottaa käyttäjää kirjoittamaan sanan seuraavalle ruudulle ja painamalla Enter-näppäintä. Huomaa "endlin" käyttö, joka pakottaa käyttäjän syöttämään tekstiä näytön seuraavalle riville. Kun käyttäjä kirjoittaa tekstiä, syötetty teksti toistetaan näytöllä, kun se menee cin-objektiin. Kun olet painanut Enter, koodisegmentin kolmas käsky suoritetaan. Tämä kolmas lause lähettää syötetyn tekstin muuttujaan txt. Syötetyn tekstin tulee olla tässä tapauksessa enintään 50 merkkiä pitkä. Huomaa uuttamisoperaattorin >> käyttö. Viimeinen lause näyttää syötetyn tekstin näytöllä.

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

char txt [20];
sen sisällä;
kellua ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << txt << " << it << " << ft << endl;

Huomaa lause:

cin >> txt >> it >> ft;

Ensimmäinen sana puretaan txt: ksi, sen vieressä ja viimeinen ft: ksi. Jos tulo oli,

yksi 25 3.6

sitten koodisegmentin tulos olisi,

yksi 25 3.6

cerr

Seuraavassa ohjelmassa on virhe:

#sisältää
käyttämällä nimitilaa vakio;
int main ()

inInt;
paluu 0;

Ensimmäinen maininta pääkohdassa () ei ole oikea. Jos koodia sisältävän tiedoston nimi on “temp.cc ”ja tuloksena olevaa suoritettavaa tiedostoa kutsutaan nimellä” temp ”, sitten seuraava g ++ -komento lähettää kääntäjän virhesanoman tiedostoon” error.txt ”:

g ++ -o lämpötila.cc 2> virhe.txt

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

Näyttö on vakiolähdekohde ja se on myös vakiovirhekohde. Jos “2> virhe.txt ”jätetään pois komennosta g ++, sitten kääntäjän virhesanoma lähetetään normaaliin virhekohteeseen, joka on edelleen näyttö (näyttö).

Virtaobjekti, joka edustaa vakiolähtökohdetta, on cout. Virtaobjekti, joka edustaa tavallista virhekohde on cerr. Ohjelman ajonaikainen virhe voidaan lähettää näytölle seuraavasti:

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

tukkia

Sovellus vie erilaisia ​​syötteitä eri aikoina. Kaikki tulot voidaan näyttää uudelleen näytöllä. Kaikki syötteet voidaan tallentaa tiedostoon. Tämä on kirjaaminen. Normaali kirjauskohde on näyttö. Tavallinen lokivirtaobjekti on tukos. Seuraava koodi näyttää syötetyn tekstin uudelleen näytöllä:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
tukkia<Jos syöttöteksti on "input_text", tukkeuma näyttää "input_text" uudelleen näytöllä.

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

#sisältää
käyttämällä nimitilaa vakio;
int main ()

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

Huomaa funktion, freopen () ja sen argumenttien käyttö. Sen ensimmäinen argumentti on lokitiedoston nimi. Jos tiedostoa ei ole, se luodaan. Sen toinen argumentti on "w" "kirjoita". Sen kolmas argumentti on vakiotulostuksen standardi. Main () -funktion toinen lause käyttää cout-toimintoa lokitekstin lähettämiseen tiedostoon. Huomaa: Todellista syöttökoodia ei ole näytetty tässä ohjelmassa.

Hahmojen ja merkkijonojen hankkiminen näppäimistöltä

Kun käyttäjä kirjoittaa syötettä, 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, ruudulle. Ohjelma jatkuu sitten seuraavaan ohjelmalausekkeeseen syötteen lukulausekkeen jälkeen.

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

Ensimmäisen merkin lukeminen

get (char_type & c):
Seuraava koodisegmentti näyttää, kuinka ensimmäinen merkki luetaan syöttövirran puskurista:

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

Ensimmäinen lause julistaa merkin ilman tehtävää. Toinen lauseke kehottaa käyttäjää syöttämään merkin. Kun käyttäjä kirjoittaa merkin ja painaa Enter-näppäintä, kolmas lause kopioi merkin tulovirran puskurista muuttujaan ch.

Vaikka käyttäjä kirjoittaisi enemmän kuin yhden merkin, koodimerkki ottaisi ensimmäisen merkin.

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

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

Jos tulo on "asdfg", palautetaan 97, mikä on desimaalinen ASCII-koodi a: lle.

get (char_type * s, suoratoisto n)

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

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

Jos syötteenä on "mahtavat ihmiset", tulos on "suuri peo", 9 merkkiä eikä 10. Merkkijono NUL-merkki (\ 0) ottaa get-argumentin kymmenennen sijan. Joten, jotta merkkijonossa olisi 9 merkkiä, sen tallennuskoon on oltava vähintään 10 ja get () -argumentin on oltava 11. Jos halutaan koko syöttörivi, merkkijonon tallennustilanumeron on oltava vähintään kirjoitettujen merkkien lukumäärä plus 1. Joten jos 12 merkkiä kirjoitetaan koko riville, numeron tulisi olla 13 merkkijonolle (str) ja 13 get () -argumentille. Huomaa, että yksi välilyönti lasketaan yhdeksi merkiksi.

get (char_type * s, streamsize n, char_type delim)
Oikealta rajattu alimerkkijono voidaan purkaa tietyn merkin ensimmäisellä esiintymisellä tai alimerkkijonon virtakoolla, joka tulee koskaan ensin. Jos seuraavan koodin syöttöteksti on "suuret ihmiset", niin "suuri" puretaan:

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

Kuudes sijainti alusta alkaen on välilyönti, ja se rajaa puretun alimerkkijonon yksinomaan. Kuudes sijainti on ensimmäinen ainoan merkin, o. Huomaa, että str: n tallennuskoko voi olla mahdollisimman suuri.

Jos seuraavan koodin syöttöteksti on "hyvät ihmiset", niin "gr" puretaan:

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

Ensimmäinen e-esiintymä esiintyy ensin kymmenennen sijan edessä.

Kaikkien rivin merkkien saaminen

Kun olet painanut Enter-näppäintä, kaikki riville kirjoitetut merkit voidaan saada seuraavan koodin mukaisesti:

cout << "Input text:" << endl;
kun (1)
char ch = (char) cin.saada();
cout << ch;
jos (ch == '\ n')
tauko;

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

kurkistaa()

Get () -jäsenfunktiot eivät lue vain seuraavaa merkkiä; ne poistavat sen virtapuskurista. Peek () -jäsenfunktio yksinkertainen kuitenkin lukee seuraavan merkin (alkaen ensimmäisestä) poistamatta sitä puskurista. Seuraavassa koodissa kukin merkki luetaan ensin peek () -toiminnolla ennen poistamista get () -toiminnolla. Kaikki mitä tapahtuu, kun käyttäjä painaa Enter-näppäintä:

cout << "Input text:" << endl;
kun (1)
char ch = (char) cin.kurkistaa();
cout << ch;
cin.saada();
jos (ch == '\ n')
tauko;

Jos get () ei poistanut seuraavia merkkejä, peek () lukisi vain ensimmäistä merkkiä, ja silmukka toistaa loputtomasti.

Merkkien näyttäminen ja poistaminen ennen Enter-painikkeen painamista

Huomaa, että cin-objektin kanssa Enter-näppäintä on painettava ennen toimintoa. No, on mahdollista, että merkit näytetään kirjoitettaessa ja poistettaessa ennen Enter-näppäimen painamista. Se tarkoittaa kuitenkin käyttöliittymää käyttöjärjestelmään. Käyttöjärjestelmät eroavat toisistaan. Joten tämä tarkoittaa erilaista koodausta eri käyttöjärjestelmille. Joten tämä aihe ansaitsee aivan toisenlaisen opetusohjelman - katso myöhemmin.

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

Cout-objekti on lähtevirtaobjekti, joka on jo instantioitu ja esiintynyt C ++ -standardikirjastossa. cout on tärkein kohde, jota käytetään merkkien ja merkkijonojen lähettämiseen näyttöön. Tämä tehdään lisäysoperaattorin kanssa, << . 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.

Lausekkeet, jotka johtavat skalaareihin, voivat olla argumentteja lisäysoperaattorille. Operaattori muuntaa skalaarin tekstiksi ja sijoittaa tekstin cout-objektivirtaan. Kun teksti lähetetään cout-objektille, se näkyy yleensä näytöllä (monitorissa). Toisinaan se ei kuitenkaan välttämättä ilmesty välittömästi. Jos haluat pakottaa tekstiä ruudulle, lisää erityisarvo "endl" heti tekstin lisäämisen jälkeen. Tällöin teksti huuhdellaan näytölle ja uusi rivi lisätään. Huomaa: '\ n' yksinkertaisesti lisää uuden rivin, mutta ei huuhtele tekstiä näytölle.

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

#sisältää
käyttämällä nimitilaa vakio;
int main ()

int se = 5;
kelluva jalka = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
paluu 0;

Tuotos on:

5 tuotetta maksavat 63 dollaria.5 Yhdysvallat.

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

#sisältää
käyttämällä nimitilaa vakio;
struct St
char str [11] = "joitain sanoja";
obj;
int main ()

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

Tulos on "joitain sanoja".

Argumentit C ++ -ohjelmalle

Ohjelman suoritus alkaa main () -funktiosta. Main () -funktiolla on itse asiassa kaksi valinnaista parametria. Main () -funktion syntaksi valinnaisilla parametreilla on:

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

paluu 0;

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

artikkelit 3 kirjakynä "iso talo"

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

Jokainen on tekstiä. Numeroitu argumentti ohjelmalle on teksti. Toisin sanoen jokainen argumentti on merkkijono. "Iso talo" on lainausmerkeissä, koska se on lause. Terminaalin komento tämän ohjelman suorittamiseksi olisi:

./ temp artikkelit 3 kirjakynä "iso talo"

Olettaen, että tiedoston lämpötila on kotihakemistossa. Huomaa, että väitteet ja pilkut eivät erota argumentteja.

Nyt pääfunktion syntaksissa argc on ohjelman argumenttien määrä plus 1. Tässä tapauksessa ohjelmalle on 5 argumenttia. Joten, argc on 6. Syntaksi, argv [argc] on joukko merkkijonoja. Ensimmäisen arvon tälle matriisille parametrilla argv [0] antaa kääntäjä. Se on osoitin ohjelmatiedoston nimelle. Loput arvot viittaavat 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ä käännettäessä seuraava ohjelma on nimeltään temp:

#sisältää
käyttämällä nimitilaa vakio;
int main (int argc, char ** argv)

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

Huomaa tässä, että taulukko "char * argv [argc]" on ilmoitettu "char ** argv".

Jos tämä ohjelma suoritetaan terminaalikomennolla,

./ temp artikkelit 3 kirjakynä "iso talo"

silloin tuotos olisi:

./ temp, 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 tulosobjekteja. Kun ohjelma on käynnissä, ohjelman syöttö eroaa siitä, kun ohjelman on tarkoitus alkaa. Kun ohjelma käynnistyy, ohjelmalle syötetään komento ohjelman ajamiseksi välilyönneillä erotettuna.

Parhaat Linux-peliohjaimen kartoitussovellukset
Jos haluat pelata pelejä Linuxissa peliohjaimella tyypillisen näppäimistön ja hiiren syöttöjärjestelmän sijaan, on sinulle hyödyllisiä sovelluksia. Mo...
Hyödyllisiä työkaluja Linux-pelaajille
Jos haluat pelata pelejä Linuxissa, on todennäköistä, että olet käyttänyt sovelluksia ja apuohjelmia, kuten Wine, Lutris ja OBS Studio, pelikokemuksen...
HD Remastered Games for Linux that Never had a Linux Release Earlier
Many game developers and publishers are coming up with HD remaster of old games to extend the life of franchise, please fans requesting compatibility ...