Konsoles pārvaldība, izmantojot iostream klases C ++

Managing Console With Iostream Classes C



Skaitļošanas jomā konsole ir datora tastatūra un datora monitors. Agrāk izvade tika nosūtīta tieši uz monitora ekrānu, nevis uz monitora parādīto logu. Parastam datora lietotājam mūsdienās lietojumprogrammas nepārprotami neizmanto monitoru. Šīs lietojumprogrammas izmanto monitorā redzamos logus. Tomēr datorprogrammētājam joprojām ir jāizmanto monitora ekrāns. Lai gan programmētājam joprojām ir jāizmanto monitora ekrāns, operētājsistēma viņam to neļauj. Operētājsistēma nodrošina logu, kas simulē monitora ekrānu. Operētājsistēmā Windows šo logu sauc par komandu uzvedni. Operētājsistēmā Linux un tās variantos šo logu sauc par termināli.

Paredzams, ka lasītājs jau zina, kā izmantot komandu uzvedni vai termināli. Šajā rakstā ir paskaidrots, kā no tastatūras lasīt rakstzīmes un virknes un nosūtīt rakstzīmes un virknes uz termināli (vai komandu uzvedni). Katram C ++ programmētājam šajā rakstā ir jāzina.







Lai varētu ievadīt tastatūru un izvadīt termināli, programmai jāsākas ar:



#iekļaut
izmantojot vārda telpastundas;

Raksta saturs

Šaurās straumes objekti standarta iostream

Iostream klase, standarta objekti, cout, cin, cerr un aizsprostojums ir aktivizēti un jau atrodas standarta bibliotēkā. Programmētājs tos vienkārši izmanto, tos vēlreiz nenosakot.



izmaksas

Šāds paziņojums galvenajā () funkcijā nosūta tekstu: Šī ir izvade. uz termināli:





izmaksas << 'Šī ir izvade.';

cout ir izejas iostream objekts standarta bibliotēkā, kas jau ir aktivizēts.<< 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.

Izmantojot iepriekš minēto paziņojumu, izvades frāzes labajā pusē parādās atkārtoti parādītā komandu uzvedne. Tas neiet uz nākamo rindu. endl šī paziņojuma beigās piespiedīs visu ekrānā izdrukāto uz nākamo rindu:



izmaksas << 'Šī ir izvade.' <<endl;

endl ir iepriekš definēts mainīgais. Ekrāna saturu var arī piespiest uz nākamo rindu, izmantojot:

izmaksas << 'Šī ir izvade.' << ' n';

Izmantojot “ n”, visas teksta rindiņas, iespējams, joprojām netiek uzreiz parādītas ekrānā. endl aizvada ekrānā visu teksta rindu.

Piezīme: virknei, kas nosūtīta uz cout, ir pēdiņas, bet nosūtītā rakstzīme - pēdiņās. Virkņu virknes un rakstzīmes var nosūtīt vienā paziņojumā, pirms katra<< . All that will appear in one line at the output if ‘ ’ is not in the series.

džins

cin ir standarta iostream ievades objekts, kas jau ir izveidots un pieejams standarta bibliotēkā. Galvenajā () funkcijā apsveriet šādu koda segmentu:

chartxt[piecdesmit];
izmaksas << 'Ievadiet vārdu un nospiediet taustiņu Enter:' txt;
izmaksas <<txt<<endl;

Pirmais paziņojums deklarē tukšu 50 rakstzīmju masīvu. Otrais paziņojums liek lietotājam nākamajā ekrāna rindā ierakstīt vārdu un nospiest taustiņu Enter. Ņemiet vērā “endl” izmantošanu, kas liek lietotājam ievadīt tekstu nākamajā ekrāna rindā. Kad lietotājs ievada tekstu, ievadītais teksts tiek parādīts ekrānā, kamēr tas nonāk cin objektā. Pēc Enter nospiešanas tiek izpildīts trešais paziņojums koda segmentā. Šis trešais paziņojums nosūta ievadīto tekstu uz mainīgo txt. Šajā gadījumā ievadītā teksta garums nedrīkst pārsniegt 50 rakstzīmes. Ņemiet vērā ieguves operatora izmantošanu, >>. Pēdējais paziņojums ekrānā parāda ievadīto tekstu.

cin var izņemt no tastatūras vairāk nekā vienu vārdu, atdalot tos ar atstarpēm. Šie vārdi būs jāiegūst dažādos mainīgos. To ilustrē šāds koda segments:

chartxt[divdesmit];
intto;
peldētpēdas;
izmaksas << 'Ievadiet 3 vērtības un nospiediet taustiņu Enter:' txt>>to>>pēdas;
izmaksas <<txt<< '' <<to<< '' <<pēdas<<endl;

Ņemiet vērā paziņojumu:

džins >>txt>>to>>pēdas;

Pirmais vārds tiek izvilkts uz txt, blakus tam un pēdējais līdz pēdai. Ja ievade bija,

viens25 3.6

tad izvade pēc koda segmenta būtu,

viens25 3.6

cerr

Šai programmai ir kļūda:

#iekļaut
izmantojot vārda telpastundas;

intgalvenais()
{
manāInt;

atgriezties 0;
}

Pirmais apgalvojums galvenajā () nav pareizs. Ja faila nosaukums ar kodu ir temp.cc un iegūto izpildāmo failu sauc par temp, tad šī komanda g ++ nosūtīs failam kompilatora kļūdas ziņojumu error.txt:

g++ -o temp temp.DC 2>kļūda.txt

Ja fails error.txt neeksistē, tas tiks izveidots. Ņemiet vērā komandas g ++ 2. daļu> error.txt.

Ekrāns ir standarta izvades galamērķis, un tas ir arī standarta kļūdu galamērķis. Ja komandā g ++ tiek izlaists 2> error.txt, kompilatora kļūdas ziņojums tiks nosūtīts uz standarta kļūdas galamērķi, kas joprojām ir ekrāns (monitors).

Plūsmas objekts, kas attēlo standarta izvades galamērķi, ir cout. Plūsmas objekts, kas attēlo standarta kļūdas galamērķi, ir cerr. Programmas izpildlaika kļūdu var nosūtīt uz ekrānu šādi:

cerr << 'Kļūdas ziņojums!' << ' n';

aizsprostot

Lietojumprogramma dažādos laikos izmanto dažādas ievades. Visas ievades var atkārtoti parādīt ekrānā. Visas ievades var saglabāt failā. Tā ir mežizstrāde. Standarta reģistrēšanas galamērķis ir ekrāns. Standarta reģistrēšanas straumes objekts ir aizsērējis. Šis kods atkal parādīs ievadīto tekstu ekrānā:

chartxt[piecdesmit];
izmaksas<<'Ievadiet tekstu un nospiediet Enter:'txt;
aizsprostot<<txt<<endl;

Ja ievades teksts ir “input_text”, tad aizsērēšana ekrānā atkārtoti parādīs “input_text”.

Praksē reģistrēšana parasti tiek novirzīta uz failu. Šī programma to ilustrē:

#iekļaut
izmantojot vārda telpastundas;

intgalvenais()
{
atvērt( 'log.txt','in',stdout);

izmaksas << 'input_text' <<endl;
}

Ņemiet vērā funkcijas freopen () izmantošanu un tās argumentus. Tās pirmais arguments ir žurnāla faila nosaukums. Ja fails neeksistē, tas tiks izveidots. Otrs arguments ir “w”, kas nozīmē “rakstīt”. Trešais arguments ir standarta izlaide. Otrais paziņojums galvenajā () funkcijā izmanto cout, lai nosūtītu reģistrēšanas tekstu uz failu. Piezīme: Faktiskais ievades kods šajā programmā nav parādīts.

Rakstzīmju un virkņu iegūšana no tastatūras

Kamēr lietotājs raksta ievadi, rakstzīmes tiek nosūtītas uz ievades straumes buferi un parādītas ekrānā. Kad lietotājs nospiež taustiņu Enter, visas rakstzīmes atrodas buferī; arī kursors pāriet uz nākamās rindas sākumu ekrānā. Pēc tam programma pēc ievades lasīšanas paziņojuma turpina nākamo programmas paziņojumu.

Cin objektam ir metodes, kas attiecas uz šo sadaļu.

Pirmā varoņa lasīšana

get (char_type & c):
Šis koda segments parāda, kā no ievades straumes bufera lasīt pirmo rakstzīmi:

charch;
izmaksas << 'Ievades teksts:' <<endl;
džins.gūt(ch);
izmaksas <<ch<<endl;

Pirmais paziņojums deklarē rakstzīmi bez piešķiršanas. Otrais paziņojums liek lietotājam ievadīt rakstzīmi. Kad lietotājs ievada rakstzīmes un nospiež taustiņu Enter, trešais paziņojums kopē rakstzīmi no ievades plūsmas bufera mainīgajā, ch.

Pat ja lietotājs ierakstītu vairākas rakstzīmes, pirmo rakstzīmi ņemtu koda segments.

gūt():
get () bez argumentiem, atgriež decimālo ASCII kodu. Apsveriet šādu koda segmentu:

izmaksas << 'Ievades teksts:' <<endl;
izmaksas << džins.gūt() <<endl;

Ja ievade ir “asdfg”, tad tiks atgriezts 97, kas ir “a” decimālais ASCII kods.

get (char_type* s, straumesize n)

Kad lietotājs ir ievadījis frāzi un nospiedis taustiņu Enter, no cin straumes bufera var iegūt vairākas rakstzīmes, kas sākas ar pirmo. Var izmantot šādu kodu:

charlpp[10];
izmaksas << 'Ievades teksts:' <<endl;
džins.gūt(str.,10);
izmaksas <<lpp<<endl;

Ja ievade ir “lieliski cilvēki”, tad iznākums būs “lielisks peo” ar 9 rakstzīmēm, nevis 10. Virknes NUL rakstzīme ( 0) ieņem desmito pozīciju get argumentā. Tātad, lai strā būtu 9 rakstzīmes, tās krātuves izmēram jābūt vismaz 10 un argumentam get () jābūt 11. Ja ir vēlama visa ievades rinda, tad virknes krātuves numuram ir jābūt vismaz skaitlim no rakstītajām rakstzīmēm plus 1. Tātad, ja visai rindai tiek ievadītas 12 rakstzīmes, skaitļa virknes (str) krātuves izmēram jābūt 13 un argumentam get () - 13. Ņemiet vērā, ka viena atstarpe tiek uzskatīta par vienu rakstzīmi.

get (char_type* s, streamamsize n, char_type delim)
Ir iespējams izvilkt apakšvirkni, kas norobežota labajā pusē, pirmo reizi sastopoties ar noteiktu rakstzīmi vai apakšvirknes straumēšanas lielumu, kas kādreiz ir pirmais. Ja ievadītais teksts šādā kodā ir lieliski cilvēki, tad lieliski tiks iegūti:

charlpp[30];
izmaksas << 'Ievades teksts:' <<endl;
džins.gūt(str.,6,'vai');
izmaksas <<lpp<<endl;

Sestā pozīcija no sākuma ir atstarpe, un tā ierobežo tikai iegūto apakšvirkni. Sestā pozīcija atrodas pirmajā vietā pirms vienīgās rakstzīmes “o”. Ņemiet vērā, ka str uzglabāšanas apjoms var būt pēc iespējas lielāks.

Ja ievadītais teksts šādā kodā ir lieliski cilvēki, tad gr tiktu izvilkts:

charlpp[30];
izmaksas << 'Ievades teksts:' <<endl;
džins.gūt(str.,10,'Un');
izmaksas <<lpp<<endl;

Pirmais “e” gadījums ir pirmais pirms desmitās pozīcijas.

Visu līnijas rakstzīmju iegūšana

Pēc taustiņa Enter nospiešanas visas rindā ierakstītās rakstzīmes var iegūt, kā parādīts šādā kodā:

izmaksas << 'Ievades teksts:' <<endl;
kamēr (1) {
charch= (char)džins.gūt();
izmaksas <<ch;
ja (ch== ' n')
pārtraukums;
}

Atlasot ar (char), katrs decimāldaļskaitlis tiek pārveidots par atbilstošo ASCII rakstzīmi.

palūrēt ()

Funkcijas get () nelasa tikai nākamo rakstzīmi; viņi to noņem no straumes bufera. Tomēr funkcija peek () vienkāršā veidā nolasa nākamo rakstzīmi (sākot no pirmās), neizņemot to no bufera. Turpmākajā kodā katra rakstzīme vispirms tiek nolasīta ar funkciju peek (), pirms tā tiek noņemta, izmantojot funkciju get (). Viss, kas notiek pēc tam, kad lietotājs nospiež taustiņu Enter:

izmaksas << 'Ievades teksts:' <<endl;
kamēr (1) {
charch= (char)džins.palūrēt();
izmaksas <<ch;
džins.gūt();
ja (ch== ' n')
pārtraukums;
}

Ja nākamās rakstzīmes netiktu noņemtas ar get (), peek () lasītu tikai pirmo rakstzīmi, un cilpa atkārtosies bezgalīgi.

Rakstzīmju parādīšana un dzēšana pirms Enter nospiešanas

Ņemiet vērā, ka, izmantojot cin objektu, pirms darbības ir jānospiež taustiņš Enter. Pirms ievadīšanas taustiņa nospiešanas ir iespējams parādīt rakstzīmes, kamēr tās tiek ievadītas un izdzēstas. Tomēr tas nozīmē saskarni ar operētājsistēmu. Operētājsistēmas atšķiras. Tātad tas nozīmē atšķirīgu kodēšanu dažādām operētājsistēmām. Tātad šī tēma ir pelnījusi pavisam citu pamācību - skatīt vēlāk.

Rakstzīmju un virkņu sūtīšana uz monitoru

Cout objekts ir izejas plūsmas objekts, kas jau ir izveidots un atrodas C ++ standarta bibliotēkā. cout ir galvenais objekts, ko izmanto rakstzīmju un virkņu nosūtīšanai uz monitoru. To veic ar ievietošanas operatoru,<< . 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.

Izteiksmes, kuru rezultātā rodas skalāri, var būt argumenti ievietošanas operatoram. Operators pārvērš skalāru tekstā un ievieto tekstu cout objektu straumē. Kad teksts tiek nosūtīts uz cout objektu, tas parasti parādās ekrānā (monitorā). Tomēr dažkārt tas var parādīties ne uzreiz. Lai ekrānā piespiestu tekstu, tūlīt pēc teksta ievietošanas ievietojiet īpašo vērtību endl. Tādējādi teksts tiks izspiests ekrānā un tiks pievienota jauna rinda. Piezīme: “ n” vienkārši pievieno jaunu rindiņu, bet neizskalo tekstu ekrānā.

Šī programma parāda, kā ekrānā drukāt int, float un parasta teksta vērtības:

#iekļaut
izmantojot vārda telpastundas;

intgalvenais()
{
intto= 5;
peldētpēdas= 63.5;
izmaksas << '' <<to<< 'preces maksā $' <<pēdas<< 'ASV.' <<endl;

atgriezties 0;
}

Rezultāts ir šāds:

The5preces maksā USD63.5ASV.

Šī programma parāda, kā tiek izdrukāta no klases veidota objekta virkne:

#iekļaut
izmantojot vārda telpastundas;

struktūraSv{
charlpp[vienpadsmit] = 'daži vārdi';
}obj;

intgalvenais()
{
izmaksas <<obj.lpp << ' n';

atgriezties 0;
}

Rezultāts ir “daži vārdi”.

Argumenti C ++ programmai

Programmas izpilde sākas no galvenās () funkcijas. Galvenajai () funkcijai faktiski ir divi izvēles parametri. Galvenās () funkcijas sintakse ar papildu parametriem ir šāda:

intgalvenais(intargc,char *argv[argc])
{

atgriezties 0;
}

Pieņemsim, ka izpildāmā C ++ faila nosaukums ir temp. Pieņemsim, ka argumenti, kas programmai nepieciešami no tās vides (operētājsistēmas), ko ierakstījis lietotājs, ir

rakstus3grāmatu pildspalva'liela māja'

Šeit ir 5 argumenti: raksti, 3, grāmata, pildspalva un liela māja

Katrs no tiem ir teksts. Numurēts programmas arguments ir teksts. Citiem vārdiem sakot, katrs arguments ir virkne. liela māja ir pēdiņās, jo tā ir frāze. Termināļa komanda šīs programmas palaišanai būtu šāda:

./temp raksti3grāmatu pildspalva'liela māja'

Pieņemot, ka faila temperatūra atrodas mājas direktorijā. Ņemiet vērā, ka argumenti atdala atstarpes, nevis komatus.

Tagad funkcijas () sintaksē argc ir programmas argumentu skaits plus 1. Šajā gadījumā programmai ir 5 argumenti. Tātad, argc ir 6. Sintaksē argv [argc] ir virkņu norāžu masīvs. Pirmo šī masīva vērtību vietnē argv [0] sniedz kompilators. Tas ir rādītājs uz programmas faila nosaukuma. Pārējās vērtības ir norādes uz programmas argumentiem lietotāja ievadītajā secībā. Šī masīva lielums ir argc. Šajā gadījumā izmērs ir 1 + 5 = 6.

Pieņemsim, ka apkopošanas laikā šādai programmai tiek piešķirts nosaukums temp:

#iekļaut
izmantojot vārda telpastundas;

intgalvenais(intargc,char**argv)
{

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

atgriezties 0;
}

Ņemiet vērā, ka masīvs 'char*argv [argc]' ir deklarēts kā 'char ** argv'.

Ja šī programma tiek palaista ar termināļa komandu,

./temp raksti3grāmatu pildspalva'liela māja'

tad iznākums būtu šāds:

./temperatūra, raksti,3, grāmata, pildspalva, liela māja

Ņemiet vērā, ka direktorija ceļš ir iekļauts izpildāmā faila nosaukumā.

Ņemiet vērā arī to, ka programmas darbības laikā (programmas izsaukšana) argc vērtība nav nosūtīta.

Secinājums

Iostream klasē ir četri svarīgi objekti, kas ir cout, cin, cerr un clog. cin ir ievades objekts, bet pārējie ir izvades objekti. Programmas darbības laikā ievade programmā atšķiras no programmas darbības sākuma. Kad programma sāk darboties, ievade programmā tiek pievienota ar komandu programmas palaišanai, atdalot ar atstarpēm.