Konsolės valdymas naudojant „iostream“ klases C ++

Managing Console With Iostream Classes C



Kompiuterijoje konsolė yra kompiuterio klaviatūra ir kompiuterio monitorius. Anksčiau išvestis buvo siunčiama tiesiai į monitoriaus ekraną, o ne į monitoriuje rodomą langą. Paprastam kompiuterio vartotojui šiandienos programos aiškiai nenaudoja monitoriaus. Šios programos naudoja monitoriuje rodomus langus. Tačiau kompiuterių programuotojui vis tiek reikia naudoti monitoriaus ekraną. Nors programuotojui vis tiek reikia naudoti monitoriaus ekraną, operacinė sistema neleidžia to daryti. Operacinėje sistemoje yra langas, imituojantis monitoriaus ekraną. „Windows“ operacinėje sistemoje šis langas vadinamas komandų eilute. „Linux“ operacinėje sistemoje ir jos variantuose šis langas vadinamas terminalu.

Tikimasi, kad skaitytojas jau žino, kaip naudotis komandine eilute ar terminalu. Šiame straipsnyje paaiškinama, kaip skaityti simbolius ir eilutes iš klaviatūros ir siųsti simbolius ir eilutes į terminalą (arba komandų eilutę). Kiekvienas C ++ programuotojas turi žinoti šiame straipsnyje.





Kad būtų galima įvesti klaviatūrą ir išvesti į terminalą, programa turi prasidėti:



#įtraukti
naudojant vardų sritisvalandų;

Straipsnio turinys

Siaurų srautų standartinio „iostream“ objektai

„Iostream“ klasė, standartiniai objektai, „cout“, „cin“, „cerr“ ir „clog“ buvo iš karto sukurti ir jau yra standartinėje bibliotekoje. Programuotojas juos tiesiog naudoja, jų dar kartą nepateikdamas.



kaina

Šis teiginys pagrindinėje () funkcijoje siunčia tekstą: Tai yra išvestis. į terminalą:





kaina << 'Tai yra išvestis.';

cout yra išvesties „iostream“ objektas standartinėje bibliotekoje, jau sukurtas.<< 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.

Naudojant aukščiau pateiktą teiginį, iš naujo rodoma komandų eilutė rodoma išvesties frazės dešinėje. Tai neina į kitą eilutę. „endl“ šio teiginio pabaigoje privers į ekraną išspausdintą viską perkelti į kitą eilutę:



kaina << 'Tai yra išvestis.' <<endl;

endl yra iš anksto nustatytas kintamasis. Ekrano turinį taip pat galima priversti pereiti į kitą eilutę:

kaina << 'Tai yra išvestis.' << ' n';

Naudojant „ n“, visos teksto eilutės vis tiek gali iš karto nepasirodyti ekrane. endl perkelia visą teksto eilutę į ekraną.

Pastaba: į cout siunčiama eilutė yra dvigubose kabutėse, o išsiųstas simbolis - viengubose kabutėse. Eilutės ir simboliai gali būti siunčiami vienu teiginiu, prieš kiekvieną<< . All that will appear in one line at the output if ‘ ’ is not in the series.

džinas

„cin“ yra standartinis „iostream“ įvesties objektas, jau sukurtas ir pasiekiamas standartinėje bibliotekoje. Apsvarstykite šį kodo segmentą pagrindinėje () funkcijoje:

anglistxt[penkiasdešimt];
kaina << „Įveskite žodį ir paspauskite„ Enter “: txt;
kaina <<txt<<endl;

Pirmasis teiginys deklaruoja tuščią 50 simbolių masyvą. Antrasis teiginys nurodo vartotojui įvesti žodį kitoje ekrano eilutėje ir paspausti klavišą Enter. Atkreipkite dėmesį į „endl“ naudojimą, kuris verčia vartotoją įvesti tekstą kitoje ekrano eilutėje. Vartotojui įvedant tekstą, įvestas tekstas pakartojamas ekrane, kol jis patenka į „cin“ objektą. Paspaudus „Enter“, vykdomas trečiasis kodo segmento teiginys. Šis trečiasis teiginys siunčia įvestą tekstą į kintamąjį txt. Įvestas tekstas šiuo atveju neturėtų būti ilgesnis nei 50 simbolių. Atkreipkite dėmesį į ištraukimo operatoriaus naudojimą, >>. Paskutinis teiginys ekrane parodo įvestą tekstą.

cin gali iš klaviatūros paimti daugiau nei vieną žodį, atskirtą tarpais. Šie žodžiai turės būti išgauti į skirtingus kintamuosius. Toliau pateiktas kodo segmentas tai iliustruoja:

anglistxt[dvidešimt];
tarpttai;
plūdėpėdų;
kaina << 'Įveskite 3 reikšmes ir paspauskite Enter:' txt>>tai>>pėdų;
kaina <<txt<< '' <<tai<< '' <<pėdų<<endl;

Atkreipkite dėmesį į teiginį:

džinas >>txt>>tai>>pėdų;

Pirmasis žodis išgaunamas į txt, kitas - šalia, o paskutinis - į ft. Jei įvestis buvo,

vienas25 3.6

tada kodo segmento išvestis būtų,

vienas25 3.6

cerr

Šioje programoje yra klaida:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
mano viduje;

grįžti 0;
}

Pirmasis teiginys pagrindiniame () yra neteisingas. Jei failo, kurio kodas yra, pavadinimas yra temp.cc, o gautas vykdomasis failas turi būti vadinamas temp, tada ši komanda g ++ nusiųs kompiliatoriaus klaidos pranešimą į failą error.txt:

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

Jei failo error.txt nėra, jis bus sukurtas. Atkreipkite dėmesį į komandos g ++ 2 dalį> error.txt.

Ekranas yra standartinė išvesties paskirties vieta, taip pat standartinė klaidos paskirties vieta. Jei komandoje g ++ praleidžiamas 2> error.txt, kompiliatoriaus klaidos pranešimas bus siunčiamas į standartinę klaidos vietą, kuri vis tiek yra ekranas (monitorius).

Srauto objektas, vaizduojantis standartinę išvesties paskirties vietą, yra cout. Srauto objektas, nurodantis standartinę klaidos paskirtį, yra cerr. Programos vykdymo laiko klaida gali būti siunčiama į ekraną taip:

cerr << 'Klaidos pranešimas!' << ' n';

užkimšti

Programa skirtingu metu naudoja skirtingus įvestis. Visas įvestis galima iš naujo rodyti ekrane. Visas įvestis galima išsaugoti faile. Tai yra medienos ruoša. Standartinė registravimo paskirtis yra ekranas. Standartinis registravimo srauto objektas yra užsikimšęs. Šis kodas vėl parodys įvesties tekstą ekrane:

anglistxt[penkiasdešimt];
kaina<<„Įveskite tekstą ir paspauskite„ Enter “:txt;
užkimšti<<txt<<endl;

Jei įvesties tekstas yra „įvesties_tekstas“, užsikimšimas ekrane vėl rodytų „įvesties tekstas“.

Praktiškai registravimas paprastai nukreipiamas į failą. Toliau pateikta programa tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
laisvai atidarytas( „log.txt“,'in',stdout);

kaina << 'input_text' <<endl;
}

Atkreipkite dėmesį į funkcijos „freopen“ () naudojimą ir jos argumentus. Pirmasis jo argumentas yra žurnalo failo pavadinimas. Jei failo nėra, jis bus sukurtas. Antrasis jo argumentas yra „w“ ir „rašyti“. Trečiasis jo argumentas yra standartinė produkcija. Antrasis pagrindinės () funkcijos teiginys naudoja cout, kad nusiųstų registravimo tekstą į failą. Pastaba: šioje programoje nerodomas tikrasis įvesties kodas.

Simbolių ir stygų gavimas iš klaviatūros

Vartotojui įvedant įvestį, simboliai siunčiami į įvesties srauto buferį ir rodomi ekrane. Vartotojui paspaudus klavišą Enter, visi simboliai yra buferyje; taip pat žymeklis pereina į kitos žemiau esančios eilutės pradžią ekrane. Tada programa pereina prie kito programos teiginio, po įvesties skaitymo teiginio.

„Cin“ objektas turi metodus, su kuriais susijęs šis skyrius.

Pirmojo personažo skaitymas

get (char_type & c):
Šiame kodo segmente parodyta, kaip perskaityti pirmąjį simbolį iš įvesties srauto buferio:

anglisch;
kaina << „Įvesties tekstas:“ <<endl;
džinas.gauti(ch);
kaina <<ch<<endl;

Pirmasis teiginys deklaruoja simbolį be priskyrimo. Antrasis teiginys liepia vartotojui įvesti simbolį. Kai vartotojas įveda simbolį ir paspaudžia įvesties klavišą, trečiasis teiginys nukopijuoja simbolį iš įvesties srauto buferio į kintamąjį, ch.

Net jei vartotojas įvedė daugiau nei vieną simbolį, pirmąjį simbolį užims kodo segmentas.

gauti ():
get () be argumento, grąžina dešimtainį ASCII kodą. Apsvarstykite šį kodo segmentą:

kaina << „Įvesties tekstas:“ <<endl;
kaina << džinas.gauti() <<endl;

Jei įvestis yra „asdfg“, grąžinama 97, o tai yra dešimtainis ASCII kodas „a“.

get (char_type* s, srauto dydis n)

Kai vartotojas įveda frazę ir paspaudžia įvesties klavišą, iš „cin stream“ buferio galima išgauti daugybę simbolių, prasidedančių nuo pirmosios. Galima naudoti šį kodą:

anglisp[10];
kaina << „Įvesties tekstas:“ <<endl;
džinas.gauti(str.,10);
kaina <<p<<endl;

Jei įvestis yra „puikūs žmonės“, išvestis bus „puikus peo“, sudarytas iš 9 simbolių, o ne 10. Eilutės NUL simbolis ( 0) užima dešimtąją poziciją gavimo argumente. Taigi, norint, kad str būtų 9 simboliai, jo saugyklos dydis turi būti ne mažesnis kaip 10, o argumentas get () turi būti 11. Jei pageidaujama visa įvesties eilutė, eilutės saugojimo numeris turi būti bent jau toks iš įvestų simbolių plius 1. Taigi, jei visoje eilutėje įvedami 12 simbolių, eilutės (str) saugyklos dydžio skaičius turėtų būti 13, o argumentas get () - 13. Atminkite, kad vienas tarpas yra laikomas vienu simboliu.

get (char_type* s, streamamsize n, char_type delim)
Galima išgauti antrinę eilutę, apribotą dešinėje, pirmą kartą atsiradus tam tikram simboliui arba antrinės eilutės srauto dydžiui, kuris kada nors yra pirmas. Jei įvesties tekstas į šį kodą yra puikūs žmonės, puikus būtų išgautas:

anglisp[30];
kaina << „Įvesties tekstas:“ <<endl;
džinas.gauti(str.,6,'arba');
kaina <<p<<endl;

Šeštoji pozicija nuo pat pradžių yra tarpo simbolis, ir ji išskiria tik išskirtą antrinę eilutę. Šeštoji pozicija yra pirmoji prieš vienintelį simbolį „o“. Atminkite, kad „str“ saugyklos dydis gali būti kuo didesnis.

Jei įvesties tekstas į šį kodą yra puikūs žmonės, gr bus išgautas:

anglisp[30];
kaina << „Įvesties tekstas:“ <<endl;
džinas.gauti(str.,10,'Ir');
kaina <<p<<endl;

Pirmasis „e“ įvykis yra pirmas prieš dešimtą poziciją.

Gauti visus linijos simbolius

Paspaudus įvesties klavišą, visi į eilutę įvesti simboliai gali būti gauti, kaip parodyta šiame kode:

kaina << „Įvesties tekstas:“ <<endl;
tuo tarpu (1) {
anglisch= (anglis)džinas.gauti();
kaina <<ch;
jei (ch== ' n')
pertrauka;
}

Naudojant simbolį (char), kiekvienas dešimtainis skaičius paverčiamas atitinkamu ASCII simboliu.

žvilgtelėti ()

Funkcijos get () ne tik skaito kitą simbolį; jie pašalina jį iš srauto buferio. Tačiau „peek“ () nario funkcija paprasta nuskaito kitą simbolį (pradedant nuo pirmojo), nepašalinus jo iš buferio. Toliau pateiktame kode kiekvienas simbolis pirmiausia perskaitomas naudojant funkciją „peek“ () prieš pašalinimą, naudojant funkciją „get“ (). Viskas, kas atsitinka vartotojui paspaudus klavišą „Enter“:

kaina << „Įvesties tekstas:“ <<endl;
tuo tarpu (1) {
anglisch= (anglis)džinas.žvilgtelėti();
kaina <<ch;
džinas.gauti();
jei (ch== ' n')
pertrauka;
}

Jei kiti simboliai nebūtų pašalinti naudojant „get“), „peek“ () skaitytų tik pirmąjį simbolį ir ciklas kartotųsi neribotą laiką.

Simbolių rodymas ir trynimas prieš paspaudžiant „Enter“

Atminkite, kad naudojant „cin“ objektą, prieš pradedant veiksmą, reikia paspausti „Enter“ klavišą. Na, prieš spausdinant klavišą „Enter“ galima įvesti ir ištrinti simbolius. Tačiau tai reiškia sąsają su operacine sistema. Operacinės sistemos skiriasi. Taigi tai reiškia skirtingą skirtingų operacinių sistemų kodavimą. Taigi ši tema nusipelno visai kitokios pamokos - žiūrėkite vėliau.

Simbolių ir eilučių siuntimas į monitorių

„Cout“ objektas yra išvesties srauto objektas, jau sukurtas ir esantis C ++ standartinėje bibliotekoje. cout yra pagrindinis objektas, naudojamas siunčiant simbolius ir eilutes į monitorių. Tai daroma naudojant įterpimo operatorių,<< . 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.

Išraiškos, dėl kurių atsiranda skaliarai, gali būti argumentai įterpimo operatoriui. Operatorius skalarą paverčia tekstu ir įdeda tekstą į cout objekto srautą. Kai tekstas siunčiamas į cout objektą, jis paprastai rodomas ekrane (monitoriuje). Tačiau kartais jis gali pasirodyti ne iš karto. Norėdami priversti tekstą rodyti ekrane, įterpkite specialią vertę „endl“ iškart įterpę tekstą. Dėl to tekstas bus rodomas ekrane ir bus pridėta nauja eilutė. Pastaba: „ n“ tiesiog prideda naują eilutę, bet nepaleidžia ekrano teksto.

Ši programa parodo, kaip ekrane spausdinti int, float ir paprasto teksto reikšmes:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
tarpttai= 5;
plūdėpėdų= 63.5;
kaina << 'The' <<tai<< „daiktai kainuoja $“ <<pėdų<< 'JAV'. <<endl;

grįžti 0;
}

Išėjimas yra:

The5daiktai kainuoja $63.5JAV.

Ši programa parodo, kaip spausdinama iš klasės sukurtas objekto eilutė:

#įtraukti
naudojant vardų sritisvalandų;

strukturaŠv{
anglisp[vienuolika] = 'Keli žodžiai';
}obj;

tarptpagrindinis()
{
kaina <<obj.p << ' n';

grįžti 0;
}

Rezultatas yra „kai kurie žodžiai“.

C ++ programos argumentai

Programos vykdymas prasideda nuo pagrindinės () funkcijos. Pagrindinė () funkcija iš tikrųjų turi du pasirenkamus parametrus. Pagrindinės () funkcijos sintaksė su pasirenkamais parametrais yra:

tarptpagrindinis(tarptargc,anglis *argv[argc])
{

grįžti 0;
}

Tarkime, kad vykdomojo C ++ failo pavadinimas yra temp. Tarkime, kad argumentai, kurių programai reikia iš savo aplinkos (operacinės sistemos), kuriuos įvedė vartotojas, yra

straipsnius3knyginis rašiklis'didelis namas'

Čia yra 5 argumentai: straipsniai, 3, knyga, rašiklis ir didelis namas

Kiekvienas iš jų yra tekstas. Skaičiuojamas programos argumentas yra tekstas. Kitaip tariant, kiekvienas argumentas yra eilutė. didelis namas yra kabutėse, nes tai yra frazė. Terminalo komanda paleisti šią programą būtų tokia:

./temp straipsniai3knyginis rašiklis'didelis namas'

Darant prielaidą, kad failo temperatūra yra namų kataloge. Atminkite, kad argumentai atskiriami tarpais, o ne kableliais.

Dabar pagrindinėje () funkcijos sintaksėje argc yra programos argumentų skaičius plius 1. Šiuo atveju yra 5 programos argumentai. Taigi, argc yra 6. Sintaksėje argv [argc] yra rodyklių į eilutes masyvas. Pirmąją šio masyvo reikšmę argv [0] pateikia kompiliatorius. Tai yra rodyklė į programos failo pavadinimą. Likusios reikšmės yra rodyklės į programos argumentus vartotojo įvesta tvarka. Šio masyvo dydis yra argc. Šiuo atveju dydis yra 1 + 5 = 6.

Tarkime, kad kompiliavimo metu ši programa pavadinta temp:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis(tarptargc,anglis**argv)
{

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

grįžti 0;
}

Atkreipkite dėmesį, kad masyvas „char*argv [argc]“ buvo paskelbtas „char ** argv“.

Jei ši programa vykdoma su terminalo komanda,

./temp straipsniai3knyginis rašiklis'didelis namas'

tada išvestis būtų tokia:

./temperatūra, straipsniai,3, knyga, rašiklis, didelis namas

Atminkite, kad katalogo kelias buvo įtrauktas į vykdomojo failo pavadinimą.

Taip pat atkreipkite dėmesį, kad vykdant programą (iškviečiant programą) argc reikšmė nebuvo išsiųsta.

Išvada

„Iostream“ klasėje yra keturi svarbūs objektai: cout, cin, cerr ir clog. cin yra įvesties objektas, o kiti - išvesties objektai. Kol programa veikia, įvestis į programą skiriasi nuo tada, kai programa bus pradėta vykdyti. Kai programa pradeda veikti, įvestis į programą sujungiama su komanda paleisti programą, atskirtas tarpais.