C ++

Správa konzoly s třídami iostream v C ++

Správa konzoly s třídami iostream v C ++

Při práci na počítači je konzolou klávesnice počítače a monitor počítače. V minulosti byl výstup odesílán přímo na obrazovku monitoru, nikoli do okna zobrazeného na monitoru. Pro běžného uživatele počítače dnes aplikace nepoužívají monitor výslovně. Tyto aplikace používají okna zobrazená na monitoru. Počítačový programátor však stále musí používat obrazovku monitoru. Ačkoli programátor stále potřebuje používat obrazovku monitoru, operační systém mu to neumožňuje. Operační systém poskytuje okno, které simuluje obrazovku monitoru. V operačním systému Windows se toto okno nazývá Příkazový řádek. V operačním systému Linux a jeho variantách se toto okno nazývá terminál.

Očekává se, že čtenář již ví, jak používat příkazový řádek nebo terminál. Tento článek vysvětluje, jak číst znaky a řetězce z klávesnice a odesílat znaky a řetězce do terminálu (nebo příkazového řádku). V tomto článku musí vědět každý programátor v C ++.

Aby měl vstup z klávesnice a výstup do terminálu, program musí začínat:

#zahrnout
pomocí jmenného prostoru std;

Obsah článku

  • Objekty úzkého proudu standardního proudu
  • Získávání znaků a řetězců z klávesnice
  • Zobrazení a mazání znaků před stisknutím klávesy Enter
  • Odesílání znaků a řetězců na monitor
  • Argumenty pro program C ++
  • Závěr

Objekty úzkého proudu standardního proudu

Třída iostream, standardní objekty, cout, cin, cerr a clog, byly instancovány a jsou již ve standardní knihovně. Programátor je pouze použije, aniž by je znovu vytvořil.

cout

Následující příkaz ve funkci main () odešle text: „Toto je výstup.”K terminálu:

cout << "This is output.";

cout je výstupní objekt iostream ve standardní knihovně, již vytvořený. << 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 výše uvedeným příkazem se znovu zobrazí příkazový řádek vpravo od výstupní fráze. Nepřejde na další řádek. „Endl“ na konci následujícího příkazu vynutí to, co je vytištěno obrazovkou, na další řádek:

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

„Endl“ je předdefinovaná proměnná. Obsah obrazovky lze také vynutit na další řádek pomocí:

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

Při použití znaku „\ n“ se všechny řádky textu nemusí na obrazovce okamžitě zobrazit. „Endl“ vyprázdní celý řádek textu na obrazovku.

Poznámka: řetězec odeslaný do cout je v uvozovkách, zatímco odeslaný znak je v jednoduchých uvozovkách. Řadu řetězců a znaků lze odeslat v jednom příkazu, každému předchází << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin je standardní vstupní objekt iostream, který je již vytvořen a je k dispozici ve standardní knihovně. Zvažte následující segment kódu ve funkci main ():

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

První příkaz deklaruje prázdné pole 50 znaků. Druhý příkaz dává uživateli pokyn, aby na dalším řádku obrazovky napsal slovo a stiskněte klávesu Enter. Všimněte si použití „endl“, které nutí uživatele k zadávání textu do dalšího řádku obrazovky. Když uživatel zadává text, zadaný text se ozve na obrazovku, zatímco jde do objektu cin. Po stisknutí klávesy Enter se provede třetí příkaz v segmentu kódu. Tento třetí příkaz odešle zadaný text do proměnné txt. V tomto případě by zadaný text neměl být delší než 50 znaků. Všimněte si použití operátoru extrakce >>. Poslední příkaz zobrazí zadaný text na obrazovce.

cin může trvat více než jedno slovo z klávesnice oddělené mezerami. Tato slova budou muset být extrahována do různých proměnných. Následující segment kódu to ilustruje:

char txt [20];
v tom;
float ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << txt << " << it << " << ft << endl;

Všimněte si prohlášení:

cin >> txt >> it >> ft;

První slovo je extrahováno do txt, další a poslední do ft. Pokud byl vstup,

jeden 25 3.6

pak by byl výstup segmentu kódu,

jeden 25 3.6

cerr

Následující program obsahuje chybu:

#zahrnout
pomocí jmenného prostoru std;
int main ()

v myInt;
návrat 0;

První příkaz v main () není správný. Pokud je název souboru s kódem „temp.cc “a výsledný spustitelný soubor se bude jmenovat„ temp “, pak následující příkaz g ++ odešle do souboru chybovou zprávu kompilátoru„ error.txt ”:

g ++ -o temp temp.cc 2> chyba.txt

Pokud soubor „chyba.txt ”neexistuje, bylo by vytvořeno. Všimněte si části „2> chyba.txt ”příkazu g ++.

Obrazovka je standardním cílem výstupu a je také standardním cílem chyby. Pokud „2> chyba.txt ”je z příkazu g ++ vynechán, pak se chybová zpráva kompilátoru odešle na standardní cílové místo chyby, což je stále obrazovka (monitor).

Objekt proudu, který představuje standardní cíl výstupu, je cout. Objekt proudu, který představuje cíl standardní chyby, je cerr. Chyba běhového programu může být odeslána na obrazovku následujícím způsobem:

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

dřevák

Aplikace přijímá různé vstupy v různých časech. Všechny vstupy lze znovu zobrazit na obrazovce. Všechny vstupy lze uložit do souboru. Toto je protokolování. Standardní cíl protokolování je obrazovka. Standardní objekt datového proudu je ucpání. Následující kód znovu zobrazí vstupní text na obrazovku:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
dřevák<Pokud je vstupní text „input_text“, pak by ucpání znovu zobrazilo „input_text“ na obrazovce.

V praxi je protokolování obvykle přesměrováno do souboru. Ilustruje to následující program:

#zahrnout
pomocí jmenného prostoru std;
int main ()

freopen ("log.txt "," w ", standardní výstup);
cout << "input_text" << endl;

Všimněte si použití funkce freopen () a jejích argumentů. Jeho prvním argumentem je název souboru protokolu. Pokud soubor neexistuje, byl by vytvořen. Jeho druhý argument je „w“ pro „write“. Jeho třetím argumentem je standardní výstup pro standardní výstup. Druhý příkaz ve funkci main () používá cout k odeslání logovacího textu do souboru. Poznámka: Skutečný vstupní kód nebyl v tomto programu zobrazen.

Získávání znaků a řetězců z klávesnice

Když uživatel zadává vstup, znaky se odesílají do vyrovnávací paměti vstupního proudu a zobrazují se na obrazovce. Když uživatel stiskne klávesu Enter, všechny znaky jsou ve vyrovnávací paměti; kurzor také přejde na začátek dalšího řádku níže na obrazovce. Program poté pokračuje na další programový příkaz po příkazu pro čtení vstupu.

Objekt cin má metody, kterými se tato část zabývá.

Čtení první postavy

get (char_type & c):
Následující segment kódu ukazuje, jak číst první znak z vyrovnávací paměti vstupního proudu:

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

První příkaz deklaruje znak bez přiřazení. Druhý příkaz říká uživateli, aby zadal znak. Když uživatel zadá znak a stiskne klávesu Enter, třetí příkaz zkopíruje znak z vyrovnávací paměti vstupního proudu do proměnné ch.

I kdyby uživatel zadal více než jeden znak, první znak by převzal segment kódu.

dostat():
get () bez argumentu, vrátí desítkový kód ASCII. Zvažte následující segment kódu:

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

Pokud je vstup „asdfg“, bylo by vráceno 97, což je desítkový ASCII kód ​​pro „a“.

get (char_type * s, streamsize n)

Poté, co uživatel zadá frázi a stiskne klávesu Enter, lze z vyrovnávací paměti cin stream extrahovat počet znaků začínajících od prvního. Lze použít následující kód:

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

Pokud je vstup „skvělí lidé“, bude výstup „skvělý“, 9 znaků a ne 10. Řetězcový znak NUL (\ 0) zaujímá desátou pozici v argumentu get. Chcete-li tedy mít ve znaku 9 znaků, jeho velikost úložiště musí být alespoň 10 a argument get () musí být 11. Je-li požadován celý vstupní řádek, musí být číslo paměti řetězce alespoň počet zadaných znaků plus 1. Pokud je tedy zadáno 12 znaků pro celý řádek, pak by číslo mělo být 13 pro velikost úložiště řetězce (str) a 13 pro argument get (). Jedna mezera se počítá jako jeden znak.

get (char_type * s, streamsize n, char_type delim)
Je možné extrahovat podřetězec, oddělený vpravo, prvním výskytem konkrétního znaku nebo velikostí podřetězce, která přijde dříve. Pokud je vstupní text do následujícího kódu „skvělí lidé“, extrahuje se „skvělý“:

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

Šestá pozice od začátku je znak mezery a výlučně vymezuje extrahovaný dílčí řetězec. Šestá pozice je na prvním místě před jedinou postavou „o“. Všimněte si, že velikost úložiště pro str může být co nejvyšší.

Pokud je vstupní text do následujícího kódu „skvělí lidé“, extrahuje se „gr“:

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

První výskyt „e“ je na prvním místě před desátou pozicí.

Získání všech znaků řádku

Po stisknutí klávesy Enter lze získat všechny znaky zadané do řádku, jak je znázorněno v následujícím kódu:

cout << "Input text:" << endl;
while (1)
char ch = (char) cin.dostat();
cout << ch;
if (ch == '\ n')
přestávka;

Casting s (char) převede každé desetinné číslo na odpovídající znak ASCII.

nahlédnout ()

Členské funkce get () nečtou pouze další znak; odeberou jej z vyrovnávací paměti streamu. Členská funkce peek () simple však čte další znak (počínaje prvním), aniž by jej odstranila z vyrovnávací paměti. V následujícím kódu je každý znak nejprve přečten pomocí funkce peek () před odstraněním pomocí funkce get (). Vše, co se stane poté, co uživatel stiskne klávesu Enter:

cout << "Input text:" << endl;
while (1)
char ch = (char) cin.nahlédnout ();
cout << ch;
cin.dostat();
if (ch == '\ n')
přestávka;

Pokud by další znaky nebyly odstraněny get (), peek () by četl pouze první znak a smyčka bude iterovat neurčitě.

Zobrazení a mazání znaků před stisknutím klávesy Enter

Všimněte si, že u objektu cin je nutné stisknout klávesu Enter, než dojde k akci. Je možné, aby se znaky zobrazovaly během psaní a mazání před stisknutím klávesy Enter. To však znamená propojení s operačním systémem. Operační systémy se liší. To znamená různé kódování pro různé operační systémy. Toto téma si tedy zaslouží úplně jiný návod - viz dále.

Odesílání znaků a řetězců na monitor

Objekt cout je objekt výstupního proudu, který je již vytvořen a je obsažen ve standardní knihovně C ++. cout je hlavní objekt používaný při odesílání znaků a řetězců na monitor. To se provádí pomocí operátoru vložení, << . 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.

Výrazy, jejichž výsledkem jsou skaláry, mohou být argumenty pro operátor vložení. Operátor převede skalár na text a umístí text do proudu objektů cout. Když je text zaslán do objektu cout, obvykle se objeví na obrazovce (monitoru). Příležitostně se však nemusí objevit okamžitě. Chcete-li vynutit text na obrazovku, vložte speciální hodnotu „endl“ hned po vložení textu. To způsobí, že text bude vyprázdněn na obrazovku a bude přidán nový řádek. Poznámka: '\ n' jednoduše přidá nový řádek, ale nevyprázdní text na obrazovku.

Následující program ukazuje, jak na obrazovku tisknout hodnoty int, float a obyčejného textu:

#zahrnout
pomocí jmenného prostoru std;
int main ()

int it = 5;
float ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
návrat 0;

Výstupem je:

Těchto 5 položek stálo 63 $.5 USA.

Následující program ukazuje, jak se vytiskne řetězec objektu vytvořeného z třídy:

#zahrnout
pomocí jmenného prostoru std;
struktura St
char str [11] = "některá slova";
obj;
int main ()

cout << obj.str << '\n';
návrat 0;

Výstup je „některá slova“.

Argumenty pro program C ++

Spouštění programu začíná funkcí main (). Funkce main () má ve skutečnosti dva volitelné parametry. Syntaxe funkce main () s volitelnými parametry je:

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

návrat 0;

Předpokládejme, že název spustitelného souboru C ++ je „temp“. Předpokládejme, že argumenty, které program potřebuje ze svého prostředí (operačního systému), zadané uživatelem, jsou,

články 3 knižní pero "velký dům"

Zde je 5 argumentů: „články“, „3“, „kniha“, „pero“ a „velký dům“

Každý je text. Číslovaný argument programu je text. Jinými slovy, každý argument je řetězec. „Velký dům“ je v uvozovkách, protože je to fráze. Příkaz terminálu pro spuštění tohoto programu by byl:

./ temp articles 3 knižní pero "velký dům"

Za předpokladu, že teplota souboru je v domovském adresáři. Všimněte si, že mezery a ne čárky oddělují argumenty.

Nyní v syntaxi funkce main () je argc počet argumentů pro program plus 1. V tomto případě existuje 5 argumentů pro program. Takže argc je 6. V syntaxi je argv [argc] pole ukazatelů na řetězce. První hodnota pro toto pole při argv [0] je dána překladačem. Je to ukazatel na název programového souboru. Zbytek hodnot jsou ukazatele na argumenty programu v zadaném pořadí uživatele. Velikost tohoto pole je argc. V tomto případě je velikost 1 + 5 = 6.

Předpokládejme, že při kompilaci má následující program název temp:

#zahrnout
pomocí jmenného prostoru std;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
návrat 0;

Všimněte si zde, že pole "char * argv [argc]", bylo deklarováno jako "char ** argv".

Pokud je tento program spuštěn pomocí příkazu terminálu,

./ temp articles 3 knižní pero "velký dům"

pak by výstup byl:

./ temp, articles, 3, book, pen, big house

Všimněte si, že cesta k adresáři byla zahrnuta s názvem spustitelného souboru.

Všimněte si také, že při běhu programu (volání programu) nebyla odeslána hodnota pro argc.

Závěr

Třída iostream má čtyři důležité objekty, kterými jsou cout, cin, cerr a clog. cin je vstupní objekt, zatímco zbytek jsou výstupní objekty. Během běhu programu se vstup do programu liší od doby, kdy má být spuštěn. Když se program spustí, vstup do programu se spojí s příkazem pro spuštění programu, oddělených mezerami.

Hry Jak vyvíjet hru na Linuxu
Jak vyvíjet hru na Linuxu
Před deseti lety by jen málo uživatelů Linuxu předpovídalo, že jejich oblíbený operační systém bude jednoho dne populární herní platformou pro komerčn...
Hry Porty komerčních her s otevřeným zdrojovým kódem
Porty komerčních her s otevřeným zdrojovým kódem
Zdarma, s otevřeným zdrojovým kódem a multiplatformní herní enginy lze hrát staré i některé z poměrně nedávných herních titulů. Tento článek uvede sez...
Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...