C ++

A konzol kezelése az iostream osztályokkal a C ++ nyelven

A konzol kezelése az iostream osztályokkal a C ++ nyelven

A számítás során a konzol a számítógép billentyűzete és a számítógép monitorja. Korábban a kimenetet közvetlenül a monitor képernyőjére küldték, és nem a monitoron megjelenő ablakra. A hétköznapi számítógép-használó számára az alkalmazások manapság nem kifejezetten használják a monitort. Ezek az alkalmazások a monitoron megjelenő ablakokat használják. A számítógépes programozónak azonban továbbra is használnia kell a monitor képernyőjét. Bár a programozónak továbbra is használnia kell a monitor képernyőjét, az operációs rendszer ezt nem teszi lehetővé. Az operációs rendszer egy ablakot kínál, amely szimulálja a monitor képernyőjét. A Windows operációs rendszerben ezt az ablakot Parancssornak hívják. A Linux operációs rendszerben és annak változataiban ezt az ablakot terminálnak hívják.

Várható, hogy az olvasó már tudja, hogyan kell használni a parancsot vagy a terminált. Ez a cikk elmagyarázza, hogyan olvashatja el a karaktereket és a karakterláncokat a billentyűzetről, és hogyan küldhet karaktereket és karakterláncokat a terminálra (vagy parancssorra). Minden C ++ programozónak tudnia kell ebben a cikkben.

Annak érdekében, hogy a billentyűzetről és a kimenetről a terminálra legyen bemenet, a programnak a következőkkel kell kezdődnie:

#include
névtér használata std;

A cikk tartalma

  • A Normál iostream keskeny adatfolyam objektumai
  • Karakterek és karakterláncok beszerzése a billentyűzetről
  • Karakterek megjelenítése és törlése az Enter megnyomása előtt
  • Karakterek és karakterláncok küldése a Monitornak
  • Argumentumok a C ++ programhoz
  • Következtetés

A Normál iostream keskeny adatfolyam objektumai

Az iostream osztály, a standard objektumok, a cout, a cin, a cerr és a clog fel vannak szerelve, és már szerepelnek a standard könyvtárban. A programozó csak használja őket, anélkül, hogy újra példányba hozná őket.

cout

A main () függvény következő állítása elküldi a szöveget: „Ez a kimenet.”A terminálhoz:

cout << "This is output.";

A cout egy kimeneti iostream objektum a standard könyvtárban, már példányosítva. << 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.

A fenti utasítással az újra megjelenő parancssor megjelenik a kimeneti kifejezés jobb oldalán. Nem megy a következő sorra. Az „endl” a következő utasítás végén a képernyő által kinyomtatottakat a következő sorra kényszeríti:

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

Az „endl” egy előre definiált változó. A képernyő tartalma a következő sorra is kényszeríthető:

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

A '\ n' használatával előfordulhat, hogy a szöveg minden sora nem jelenik meg azonnal a képernyőn. Az „endl” a teljes szövegsort a képernyőre mossa.

Megjegyzés: a cout-nak küldött karakterlánc dupla idézőjelben, míg az elküldött karakter idézőjelben van. Húrok és karakterek sorozata küldhető el egy utasításban, mindegyiket megelőzve << . All that will appear in one line at the output if '\n' is not in the series.

cin

A cin a szabványos iostream beviteli objektum, már példányosított és elérhető a standard könyvtárban. Vegye figyelembe a következő kódszegmenst a main () függvényben:

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

Az első utasítás 50 karakterből álló üres tömböt deklarál. A második utasítás utasítja a felhasználót, hogy írjon be egy szót a következő képernyősorba, és nyomja meg az Enter billentyűt. Vegye figyelembe az "endl" használatát, amely arra kényszeríti a felhasználót, hogy szöveget írjon be a képernyő következő sorába. Amikor a felhasználó szöveget gépel, a beírt szöveg visszhangzik a képernyőre, miközben az a cin objektumba kerül. Az Enter megnyomása után a kódszegmens harmadik utasítása végrehajtásra kerül. Ez a harmadik utasítás elküldi a beírt szöveget a txt változónak. A beírt szöveg ebben az esetben legfeljebb 50 karakter lehet. Vegye figyelembe az extrakciós operátor >> használatát. Az utolsó utasítás megjeleníti a képernyőn a beírt szöveget.

a cin több szót is elvehet a billentyűzetről, szóközökkel elválasztva. Ezeket a szavakat különféle változókba kell kibontani. A következő kódszegmens ezt szemlélteti:

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

Vegye figyelembe az állítást:

cin >> txt >> it >> ft;

Az első szót kibontjuk txt-be, a következőt, az utolsót ft-ra. Ha a bemenet volt,

egy 25 3.6

akkor a kódszegmens kimenete az lenne,

egy 25 3.6

cerr

A következő programnak hibája van:

#include
névtér használata std;
int main ()

a myInt-ben;
visszatér 0;

A main () első állítása nem helyes. Ha a kódot tartalmazó fájl neve „temp.cc ”és az eredményül kapott futtatható fájlt„ temp ”-nak kell nevezni, akkor a következő g ++ parancs elküldi a fordító hibaüzenetét a fájlnak:„ error.txt ”:

g ++ -o hőm.cc 2> hiba.txt

Ha a fájl „hiba.txt ”nem létezik, létrejön. Vegye figyelembe a „2> hiba részt.txt ”.

A képernyő a szokásos kimeneti cél, és egyben a szokásos hibacél. Ha „2> hiba.A txt ”kihagyásra kerül a g ++ parancsból, majd a fordító hibaüzenetét elküldjük a szokásos hibacélnak, amely továbbra is a képernyő (monitor).

A standard kimeneti rendeltetési helyet képviselő adatfolyam cout. A standard hibacélpontot képviselő stream objektum cerr. Program futásidejű hiba a következőképpen küldhető el a képernyőn:

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

klumpa

Egy alkalmazás különböző bemeneteket vesz igénybe különböző időpontokban. Az összes bemenet újra megjeleníthető a képernyőn. Az összes bemenet fájlba menthető. Ez naplózás. A szokásos naplózási cél a képernyő. A szokásos naplózó adatfolyam objektum eltömődés. A következő kód ismét megjeleníti a bevitt szöveget a képernyőn:

char txt [50];
cout<<"Enter text and press Enter:"<>txt;
klumpa<Ha a beviteli szöveg "input_text", akkor az eltömődés újból megjeleníti a "input_text" szót a képernyőn.

A gyakorlatban a naplózást általában fájlba irányítják. A következő program ezt szemlélteti:

#include
névtér használata std;
int main ()

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

Vegye figyelembe a freopen () függvény és argumentumainak használatát. Első érve a naplófájl neve. Ha a fájl nem létezik, akkor létrejön. A második érv az "w" az "írás" mellett. Harmadik érve a standard-output kimenete. A main () függvény második mondata a cout segítségével küldi a naplózási szöveget a fájlba. Megjegyzés: A tényleges bemeneti kód nem jelenik meg ebben a programban.

Karakterek és karakterláncok beszerzése a billentyűzetről

Amíg a felhasználó gépeli a bevitelt, a karaktereket elküldi az input stream pufferbe, és megjeleníti a képernyőn. Amikor a felhasználó megnyomja az Enter billentyűt, az összes karakter a pufferben található; a kurzor az alábbi következő sor elejére megy, a képernyőn. A program ezután a bemeneti olvasási utasítás után folytatja a következő programkivonatot.

A cin objektumnak vannak metódusai, amelyekkel ez a szakasz foglalkozik.

Az első karakter elolvasása

get (char_type & c):
A következő kódszegmens bemutatja, hogyan olvasható le az első karakter a bemeneti adatfolyam pufferből:

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

Az első utasítás kijelöli a karaktert hozzárendelés nélkül. A második utasítás utasítja a felhasználót, hogy írjon be egy karaktert. Amikor a felhasználó beírja a karaktert és megnyomja az Enter billentyűt, a harmadik utasítás bemásolja a karaktert az input stream pufferből a változóba, ch.

Még ha a felhasználó több karaktert is beír, az első karaktert a kódszegmens veszi át.

kap():
A get () argumentum nélkül adja vissza a decimális ASCII kódot. Vegye figyelembe a következő kódszegmenst:

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

Ha a bemenet "asdfg", akkor 97-et adunk vissza, ami az "a" decimális ASCII kódja.

get (char_type * s, streamsize n)

Miután a felhasználó bevitt egy kifejezést és megnyomta az Enter billentyűt, az elsőtől kezdve számos karakter kinyerhető a cin stream pufferből. A következő kód használható:

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

Ha a bemenet "nagyszerű emberek", akkor a kimenet "nagyszerű peo" lesz, 9 karakterből és nem 10 karakterből. A string NUL karakter (\ 0) a get argumentum tizedik pozícióját foglalja el. Tehát ahhoz, hogy 9 karakter legyen str-ben, a tároló méretének legalább 10-nek, a get () argumentumnak pedig 11-nek kell lennie. Ha a teljes beviteli sorra van szükség, akkor a karakterlánc-tároló számának legalább a beírt karakterek számának, plusz 1-nek kell lennie. Tehát, ha 12 karaktert írunk be a teljes sorba, akkor a számnak 13-nak kell lennie a karakterlánc (str) tárhelyméretnél és 13-nak a get () argumentumnál. Vegye figyelembe, hogy egy szóköz egy karakternek számít.

get (char_type * s, streamsize n, char_type delim)
Lehetőség van a jobb oldalon elhatárolt al-karakterláncok kibontására egy adott karakter első előfordulásával, vagy az al-karakterlánc átméretével, amely valaha előbb jön. Ha a következő kód beviteli szövege „nagyszerű emberek”, akkor a „nagyszerű” kivonat:

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

A kezdetektől fogva a hatodik pozíció a szóköz, és kizárólag a kivont részstringet határolja. A hatodik pozíció az első, az „o” karakter előtt áll. Vegye figyelembe, hogy az str tárolási mérete a lehető legnagyobb lehet.

Ha a következő kód beviteli szövege „nagyszerű emberek”, akkor a „gr” kibontásra kerül:

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

Az „e” első előfordulása először a tizedik pozíció előtt következik.

A vonal összes karakterének megszerzése

Az Enter billentyű megnyomása után a sorba beírt összes karakter megszerezhető az alábbi kód szerint:

cout << "Input text:" << endl;
míg (1)
char ch = (char) cin.kap();
cout << ch;
ha (ch == '\ n')
szünet;

A (char) karakterrel történő casting minden tizedes számot a megfelelő ASCII karakterré alakít.

kandikál()

A get () tagfüggvények nem csak a következő karaktert olvassák; eltávolítják a folyam pufferből. Az egyszerű peek () tagfüggvény azonban beolvassa a következő karaktert (az elsőtől kezdve) anélkül, hogy eltávolítaná a pufferből. A következő kódban minden karaktert először a peek () függvénnyel olvas le, mielőtt eltávolítaná a get () függvénnyel. Mindaz, ami történik, miután a felhasználó megnyomta az Enter billentyűt:

cout << "Input text:" << endl;
míg (1)
char ch = (char) cin.kandikál();
cout << ch;
cin.kap();
if (ch == '\ n')
szünet;

Ha a következő karaktereket a get () nem távolította el, akkor a peek () csak az első karaktert olvassa, és a ciklus végtelenül ismétlődik.

Karakterek megjelenítése és törlése az Enter megnyomása előtt

Figyelje meg, hogy a cin objektummal meg kell nyomni az Enter billentyűt, mielőtt művelet történne. Nos, lehetséges, hogy a karakterek gépelés és törlés közben megjelenjenek az Enter billentyű megnyomása előtt. Ez azonban azt jelenti, hogy kapcsolódni kell az operációs rendszerhez. Az operációs rendszerek különböznek. Tehát ez különböző kódolást jelent a különböző operációs rendszerek számára. Tehát ez a téma teljesen más oktatást érdemel - lásd később.

Karakterek és karakterláncok küldése a Monitornak

A cout objektum egy kimeneti adatfolyam objektum, már példányosított és jelen van a C ++ szabványos könyvtárban. A cout a karakterek és karakterláncok monitorra történő elküldésében használt fő objektum. Ez a beillesztés operátorral történik, << . 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.

A skalárokat eredményező kifejezések argumentumok lehetnek a beszúrás operátor számára. Az operátor a skalárt szöveggé alakítja, és a szöveget a cout objektumfolyamba helyezi. Amikor a szöveget elküldi a cout objektumnak, az általában megjelenik a képernyőn (monitor). Előfordulhat azonban, hogy nem azonnal jelenik meg. Ha szöveget szeretne kényszeríteni a képernyőn, akkor a szöveg beillesztése után helyezze be az „endl” értéket. Ez a szöveget a képernyőre mossa, és új sort ad hozzá. Megjegyzés: A '\ n' egyszerűen hozzáad egy új sort, de nem mossa ki a szöveget a képernyőn.

A következő program bemutatja, hogyan lehet kinyomtatni az int, a lebegő és a hétköznapi szöveg értékeit a képernyőn:

#include
névtér használata std;
int main ()

int = 5;
úszó ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
visszatér 0;

A kimenet:

Az 5 elem 63 dollárba került.5 USA.

A következő program bemutatja, hogyan nyomtatják ki az osztályból példányos objektum karakterláncát:

#include
névtér használata std;
struct St
char str [11] = "néhány szó";
obj;
int main ()

cout << obj.str << '\n';
visszatér 0;

A kimenet "néhány szó".

Argumentumok a C ++ programhoz

A program végrehajtása a main () függvényből indul. A main () függvénynek valójában két opcionális paramétere van. A main () függvény szintaxisa az opcionális paraméterekkel:

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

visszatér 0;

Tegyük fel, hogy a futtatható C ++ fájl neve „temp”. Tegyük fel, hogy a felhasználó által beírt argumentumok a programnak a környezetéből (operációs rendszeréből) szükségesek,

cikkek 3 könyv toll "nagy ház"

Itt 5 érv szól: „cikkek”, „3”, „könyv”, „toll” és „nagy ház”

Mindegyik szöveg. A program számozott argumentuma szöveg. Más szavakkal, minden argumentum egy karakterlánc. A „nagy ház” idézőjelben szerepel, mert ez egy kifejezés. A terminál parancs a program futtatásához a következő lenne:

./ temp cikkek 3 könyv toll "nagy ház"

Feltéve, hogy a fájl hőmérséklete a saját könyvtárban van. Vegye figyelembe, hogy a szóközök és nem vesszők választják el az argumentumokat.

Most a main () függvény szintaxisában az argc a program argumentumainak száma, plusz 1. Ebben az esetben 5 érv szól a program mellett. Tehát az argc értéke 6. Szintaxisban az argv [argc] a húrokra mutató mutatók tömbje. Ennek a tömbnek az első értékét az argv [0] -nál a fordító adja meg. Ez egy mutató a program fájl nevére. A többi érték a felhasználó által beírt sorrendben a program argumentumokra mutat. A tömb mérete argc. Ebben az esetben a méret 1 + 5 = 6.

Tegyük fel, hogy a fordításkor a következő program neve temp:

#include
névtér használata std;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
visszatér 0;

Itt jegyezzük meg, hogy a "char * argv [argc]" tömböt "char ** argv" -ként deklarálták.

Ha ezt a programot a terminál paranccsal futtatják,

./ temp cikkek 3 könyv toll "nagy ház"

akkor a kimenet a következő lenne:

./ temp, cikkek, 3, könyv, toll, nagy ház

Vegye figyelembe, hogy a könyvtár elérési útja szerepel a futtatható fájl nevében.

Vegye figyelembe azt is, hogy a program futtatása (a program hívása) során az argc értéke nem lett elküldve.

Következtetés

Az iostream osztálynak négy fontos objektuma van: cout, cin, cerr és clog. A cin bemeneti objektum, míg a többi kimeneti objektum. Amíg egy program fut, a program bemenete eltér attól, amikor a program futni kezd. Amikor egy program futni kezd, a programba bevitt adatok szóközökkel elválasztva kapcsolódnak a program futtatásához szükséges parancshoz.

A GameConqueror Cheat Engine használata Linux alatt
A cikk tartalmaz egy útmutatót a GameConqueror csaló motor Linux alatt történő használatáról. Sok olyan felhasználó, aki Windows-on játszik játékot, g...
A legjobb játékkonzol emulátorok Linuxhoz
Ez a cikk felsorolja a Linux számára elérhető népszerű játékkonzol-emulációs szoftvereket. Az emuláció egy szoftver-kompatibilitási réteg, amely játék...
A legjobb Linux-disztribútorok játékhoz 2021-ben
A Linux operációs rendszer hosszú utat tett meg eredeti, egyszerű, szerver alapú kinézetétől. Ez az operációs rendszer rendkívül javult az elmúlt évek...