Správa konzoly pomocou tried iostream v C ++

Managing Console With Iostream Classes C



Pri práci na počítači je konzola počítačová klávesnica a monitor počítača. V minulosti bol výstup odoslaný priamo na obrazovku monitora, a nie do okna zobrazeného na monitore. Pre bežných používateľov počítačov aplikácie dnes monitor vyslovene nepoužívajú. Tieto aplikácie používajú okná zobrazené na monitore. Počítačový programátor však stále potrebuje používať obrazovku monitora. Aj keď programátor stále potrebuje používať obrazovku monitora, operačný systém mu to neumožňuje. Operačný systém poskytuje okno, ktoré simuluje obrazovku monitora. V operačnom systéme Windows sa toto okno nazýva Príkazový riadok. V operačnom systéme Linux a jeho variantoch sa toto okno nazýva terminál.

Očakáva sa, že čitateľ už vie, ako používať príkazový riadok alebo terminál. Tento článok vysvetľuje, ako čítať znaky a reťazce z klávesnice a odosielať znaky a reťazce na terminál (alebo príkazový riadok). V tomto článku potrebuje vedieť každý programátor C ++.







Aby mal program vstup z klávesnice a výstup na terminál, musí program začať:



#zahrnúť
použitím priestor mienhodiny;

Obsah článku

Objekty úzkeho toku štandardného iostreamu

Trieda iostream, štandardné objekty, cout, cin, cerr a clog, boli zavedené a už sú v štandardnej knižnici. Programátor ich len použije bez toho, aby ich znova inicializoval.



náklady

Nasledujúci príkaz vo funkcii main () odošle text This is output. na terminál:





náklady << 'Toto je výstup.';

cout je výstupný iostream objekt v štandardnej knižnici, ktorý je už vytvorený.<< 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.

S vyššie uvedeným príkazom sa znovu zobrazený príkazový riadok zobrazí napravo od výstupnej frázy. Neprejde na ďalší riadok. endl na konci nasledujúceho príkazu prinúti vytlačiť obrazovku na nasledujúci riadok:



náklady << 'Toto je výstup.' <<endl;

endl je preddefinovaná premenná. Obsah obrazovky je možné vynútiť aj na nasledujúci riadok pomocou:

náklady << 'Toto je výstup.' << ' n';

Pri použití „ n“ sa všetky riadky textu nemusia na obrazovke objaviť okamžite. endl vyprázdni celý riadok textu na obrazovku.

Poznámka: reťazec odoslaný do cout je v dvojitých úvodzovkách, zatiaľ čo odoslaný znak je v jednoduchých úvodzovkách. Sériu reťazcov a znakov je možné odoslať v jednom príkaze, z ktorých každému predchádza znak<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin je štandardný vstupný objekt iostream, ktorý je už inštancovaný a je k dispozícii v štandardnej knižnici. Vo funkcii main () zvážte nasledujúci segment kódu:

charTXT[päťdesiat];
náklady << „Zadajte slovo a stlačte kláves Enter:“ TXT;
náklady <<TXT<<endl;

Prvý príkaz deklaruje prázdne pole s 50 znakmi. Druhý príkaz dáva používateľovi pokyn, aby na nasledujúcom riadku obrazovky zadal slovo a stlačil kláves Enter. Všimnite si použitia „endl“, ktoré núti užívateľa zadávať text v nasledujúcom riadku obrazovky. Keď používateľ zadáva text, zadaný text sa ozve na obrazovku, kým prejde do objektu cin. Po stlačení klávesu Enter sa vykoná tretí príkaz v segmente kódu. Tento tretí príkaz odošle zadaný text do premennej txt. Zadaný text by v tomto prípade nemal mať viac ako 50 znakov. Všimnite si použitia extrakčného operátora, >>. Posledný príkaz zobrazí zadaný text na obrazovke.

cin môže z klávesnice prevziať viac ako jedno slovo oddelené medzerami. Tieto slová bude potrebné extrahovať do rôznych premenných. Nasledujúci segment kódu to ilustruje:

charTXT[dvadsať];
intto;
plavákft;
náklady << „Zadajte 3 hodnoty a stlačte kláves Enter:“ TXT>>to>>ft;
náklady <<TXT<< '' <<to<< '' <<ft<<endl;

Všimnite si vyhlásenie:

gin >>TXT>>to>>ft;

Prvé slovo sa extrahuje do formátu txt, ďalšie vedľa neho a posledné do ft. Ak bol vstup

jeden25 3.6

potom by výstup podľa segmentu kódu bol,

jeden25 3.6

cerr

Nasledujúci program obsahuje chybu:

#zahrnúť
použitím priestor mienhodiny;

intHlavná()
{
v myInt;

vrátiť sa 0;
}

Prvé tvrdenie v main () nie je správne. Ak je názov súboru s kódom temp.cc a výsledný spustiteľný súbor sa má nazývať temp, potom nasledujúci príkaz g ++ pošle do súboru error.txt chybové hlásenie kompilátora:

g++ -o tepl.DC 2>chyba.TXT

Ak súbor error.txt neexistuje, bol by vytvorený. Všimnite si časť 2> error.txt príkazu g ++.

Obrazovka je štandardným cieľovým výstupom a je tiež štandardným cieľom chyby. Ak z príkazu g ++ vynecháme 2> error.txt, chybové hlásenie kompilátora by bolo odoslané na štandardné cieľové miesto chyby, ktorým je stále obrazovka (monitor).

Objekt toku, ktorý predstavuje štandardný výstupný cieľ, je cout. Objekt toku, ktorý predstavuje štandardný cieľ chyby, je cerr. Chybu runtime programu je možné odoslať na obrazovku nasledovne:

cerr << 'Chybové hlásenie!' << ' n';

upchať

Aplikácia má rôzne vstupy v rôznych časoch. Všetky vstupy je možné znova zobraziť na obrazovke. Všetky vstupy je možné uložiť do súboru. Toto je protokolovanie. Štandardným cieľom protokolovania je obrazovka. Štandardným objektom toku protokolovania je upchávka. Nasledujúci kód znova zobrazí vstupný text na obrazovku:

charTXT[päťdesiat];
náklady<<„Zadajte text a stlačte kláves Enter:“TXT;
upchať<<TXT<<endl;

Ak je vstupný text „input_text“, potom by clog znova zobrazil „input_text“ na obrazovke.

V praxi je protokolovanie zvyčajne presmerované do súboru. Nasledujúci program to ilustruje:

#zahrnúť
použitím priestor mienhodiny;

intHlavná()
{
voľne otvorené( 'log.txt','in',stdout);

náklady << 'input_text' <<endl;
}

Všimnite si použitia funkcie, freopen () a jej argumentov. Jeho prvým argumentom je názov súboru denníka. Ak súbor neexistuje, bol by vytvorený. Jeho druhý argument je „w“ pre „zápis“. Jeho tretím argumentom je výstup pre štandardný výstup. Druhý príkaz vo funkcii main () používa cout na odoslanie protokolovaného textu do súboru. Poznámka: Skutočný vstupný kód nebol v tomto programe zobrazený.

Získavanie znakov a reťazcov z klávesnice

Kým používateľ zadáva vstup, znaky sú odoslané do vyrovnávacej pamäte vstupného toku a zobrazené na obrazovke. Keď používateľ stlačí kláves Enter, všetky znaky sú vo vyrovnávacej pamäti; kurzor tiež prejde na začiatok nasledujúceho riadka nižšie, na obrazovku. Program potom pokračuje k ďalšiemu príkazu programu po vstupnom príkaze na čítanie.

Objekt cin má metódy, ktorými sa táto časť zaoberá.

Čítanie prvej postavy

získať (char_type & c):
Nasledujúci segment kódu ukazuje, ako čítať prvý znak z vyrovnávacej pamäte vstupného toku:

charch;
náklady << 'Vstupný text:' <<endl;
gin.dostať(ch);
náklady <<ch<<endl;

Prvé vyhlásenie deklaruje znak bez priradenia. Druhý príkaz hovorí používateľovi, aby zadal znak. Keď používateľ zadá znak a stlačí kláves Enter, tretí príkaz skopíruje znak z vyrovnávacej pamäte vstupného toku do premennej, kap.

Aj keď používateľ zadá viac ako jeden znak, prvý znak bude prevzatý segmentom kódu.

dostať ():
get () bez argumentu, vráti desatinný kód ASCII. Zvážte nasledujúci segment kódu:

náklady << 'Vstupný text:' <<endl;
náklady << gin.dostať() <<endl;

Ak je vstup „asdfg“, vráti sa 97, čo je desatinný kód ASCII pre „a“.

get (char_type* s, streamsize n)

Potom, čo užívateľ zadá frázu a stlačí kláves Enter, je možné z vyrovnávacej pamäte cin stream extrahovať niekoľko znakov začínajúcich od prvého. Môžete použiť nasledujúci kód:

charp[10];
náklady << 'Vstupný text:' <<endl;
gin.dostať(str,10);
náklady <<p<<endl;

Ak je vstup „veľkí ľudia“, bude výstupom „veľké peo“ s 9 znakmi a nie s hodnotou 10. Reťazec so znakom NUL ( 0) zaujíma v argumente get desiate miesto. Aby teda malo 9 znakov v reťazci, veľkosť úložiska musí byť aspoň 10 a argument get () musí byť 11. Ak je požadovaný celý vstupný riadok, potom číslo úložiska reťazcov musí byť aspoň číslo. napísaných znakov plus 1. Ak je teda pre celý riadok napísaných 12 znakov, číslo by malo byť 13 pre veľkosť pamäte reťazca (str) a 13 pre argument get (). Jedna medzera sa počíta ako jeden znak.

get (char_type* s, streamsize n, char_type delim)
Podreťazec vymedzený vpravo je možné extrahovať prvým výskytom konkrétneho znaku alebo veľkosťou prúdu podreťazca, ktorá je na prvom mieste. Ak sú vstupný text do nasledujúceho kódu skvelí ľudia, potom by sa extrahovali skvelí:

charp[30];
náklady << 'Vstupný text:' <<endl;
gin.dostať(str,6,'alebo');
náklady <<p<<endl;

Šiesta pozícia od začiatku je priestorový znak a výhradne vymedzuje extrahovaný podreťazec. Šiesta pozícia je na prvom mieste pred jedinou postavou „o“. Všimnite si toho, že veľkosť úložiska pre str môže byť čo najvyššia.

Ak sú vstupný text do nasledujúceho kódu skvelí ľudia, extrahuje sa gr:

charp[30];
náklady << 'Vstupný text:' <<endl;
gin.dostať(str,10,„A“);
náklady <<p<<endl;

Prvý výskyt 'e' je na prvom mieste pred desiatou pozíciou.

Získanie všetkých postáv v riadku

Po stlačení klávesu Enter je možné získať všetky znaky zadané do riadka, ako je znázornené v nasledujúcom kóde:

náklady << 'Vstupný text:' <<endl;
kým (1) {
charch= (char)gin.dostať();
náklady <<ch;
keby (ch== ' n')
prestávka;
}

Prenášanie pomocou (char) prevádza každé desatinné číslo na zodpovedajúci znak ASCII.

nahliadnuť ()

Členské funkcie get () nečítajú iba nasledujúci znak; odstránia ho z vyrovnávacej pamäte toku. Členská funkcia peek () však číta nasledujúci znak (začínajúc od prvého) bez jeho odstránenia z vyrovnávacej pamäte. V nasledujúcom kóde je každý znak najskôr načítaný pomocou funkcie peek () a potom je odstránený funkciou get (). Všetko, čo sa stane, keď používateľ stlačí kláves Enter:

náklady << 'Vstupný text:' <<endl;
kým (1) {
charch= (char)gin.nakuknúť();
náklady <<ch;
gin.dostať();
keby (ch== ' n')
prestávka;
}

Ak by ďalšie znaky neboli odstránené príkazom get (), peek () by čítal iba prvý znak a slučka by sa opakovala donekonečna.

Zobrazenie a odstraňovanie znakov pred stlačením klávesu Enter

Všimnite si, že s objektom cin musí byť pred vykonaním akcie stlačené tlačidlo Enter. Je možné, že sa znaky zobrazia počas písania a vymazávania pred stlačením klávesu Enter. To však znamená prepojenie s operačným systémom. Operačné systémy sa líšia. To teda znamená rôzne kódovanie pre rôzne operačné systémy. Táto téma si teda zaslúži úplne iný návod - pozrite si neskôr.

Odosielanie znakov a reťazcov na monitor

Objekt cout je objekt výstupného toku, ktorý je už inštancovaný a je prítomný v štandardnej knižnici C ++. cout je hlavný objekt používaný na odosielanie znakov a reťazcov na monitor. To sa deje pomocou operátora vkladania,<< . 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ýrazy, ktoré majú za následok skaláry, môžu byť argumentmi pre operátor vkladania. Operátor prevedie skalár na text a umiestni text do prúdu objektov cout. Keď je text odoslaný do objektu cout, bežne sa zobrazuje na obrazovke (monitore). Niekedy sa to však nemusí prejaviť okamžite. Ak chcete vynútiť text na obrazovku, vložte špeciálnu hodnotu endl hneď po vložení textu. To spôsobí, že text bude prepláchnutý na obrazovku a bude pridaný nový riadok. Poznámka: „ n“ jednoducho pridá nový riadok, ale nespustí text na obrazovku.

Nasledujúci program ukazuje, ako vytlačiť hodnoty int, float a obyčajného textu na obrazovku:

#zahrnúť
použitím priestor mienhodiny;

intHlavná()
{
intto= 5;
plavákft= 63,5;
náklady << 'The' <<to<< „položky stoja $“ <<ft<< 'USA.' <<endl;

vrátiť sa 0;
}

Výstupom je:

The5položky stoja $63,5USA.

Nasledujúci program ukazuje, ako sa vytlačí reťazec objektu vytvoreného z triedy:

#zahrnúť
použitím priestor mienhodiny;

StructSv{
charp[jedenásť] = 'nejaké slová';
}obj;

intHlavná()
{
náklady <<obj.p << ' n';

vrátiť sa 0;
}

Výstupom je „niekoľko slov“.

Argumenty pre program C ++

Spustenie programu začína funkciou main (). Funkcia main () má v skutočnosti dva voliteľné parametre. Syntax funkcie main () s voliteľnými parametrami je:

intHlavná(intargc,char *argv[argc])
{

vrátiť sa 0;
}

Predpokladajme, že názov spustiteľného súboru C ++ je dočasný. Predpokladajme, že argumenty, ktoré program potrebuje zo svojho prostredia (operačného systému), zadané používateľom, sú,

článkov3knižné pero'veľký dom'

Tu je 5 argumentov: články, 3, kniha, pero a veľký dom

Každý je text. Očíslovaný argument programu je text. Inými slovami, každý argument je reťazec. veľký dom je v úvodzovkách, pretože je to fráza. Príkaz terminálu na spustenie tohto programu by bol:

./dočasné články3knižné pero'veľký dom'

Za predpokladu, že temp súboru je v domovskom adresári. Argumenty oddeľujú medzery, nie čiarky.

V syntaxi funkcie main () je argc počet argumentov pre program plus 1. V tomto prípade je pre program 5 argumentov. Takže argc je 6. V syntaxi je argv [argc] rad ukazovateľov na reťazce. Prvú hodnotu pre toto pole v argv [0] zadá kompilátor. Je to ukazovateľ na názov súboru programu. Ostatné hodnoty sú ukazovateľmi na programové argumenty v zadanom poradí užívateľa. Veľkosť tohto poľa je argc. V tomto prípade je veľkosť 1 + 5 = 6.

Predpokladajme, že pri kompilácii má nasledujúci program názov temp:

#zahrnúť
použitím priestor mienhodiny;

intHlavná(intargc,char**argv)
{

náklady <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

vrátiť sa 0;
}

Tu si všimnite, že pole „char*argv [argc]“ bolo deklarované ako „char ** argv“.

Ak je tento program spustený pomocou príkazu terminálu,

./dočasné články3knižné pero'veľký dom'

potom by bol výstup:

./teplota, články,3, kniha, pero, veľký dom

Všimnite si toho, že cesta k adresáru bola zahrnutá v názve spustiteľného súboru.

Všimnite si tiež, že pri spustení programu (volanie programu) nebola odoslaná hodnota pre argc.

Záver

Trieda iostream má štyri dôležité objekty, ktorými sú cout, cin, cerr a clog. cin je vstupný objekt, zatiaľ čo ostatné sú výstupné objekty. Kým je program spustený, vstup do programu je iný, ako keď sa má program spustiť. Keď sa program spustí, vstup do programu sa spojí s príkazom na spustenie programu, oddelené medzerami.