c++ alapok
C++ be- és kimenet alapjai
Ebben a leckében a C++ be és kimenet alapjait tanuljuk meg: hogyan írunk ki dolgokat a képernyőre std::cout-tal és hogyan olvasunk be adatokat a billentyűzetről std::cin-nel az iostream segítségével. Végigmegyünk azon, mi a különbség a ‘\n’ és a std::endl között, mikor miért jobb az egyik, miért harapja le a szóköz utáni részt a >> és hogyan oldja meg ezt az std::getline + std::ws / cin.ignore.
A lecke célja, hogy a C++ be- és kimenet rutinszerű legyen: tudj számot és teljes nevet beolvasni, szépen formázva kiírni (pl. két tizedessel), és alap validitást csinálni (hibás input esetén törölni a hibajelzőt és kiüríteni a sort). A végén rövid, gyakorlati mini feladatokkal zárunk, hogy azonnal be is gyakorold.
Kiírás (std::cout)
Gyors kezdés: szöveg, szám, kifejezés
Mi az az std?
A standard library (szabványkönyvtár) dobozcímkéje, hivatalosan névtér (namespace). A könyvtárban rengeteg név van (cout, cin, string, vector …), és hogy ne ütközzenek a te saját neveiddel, előtte kiírjuk, hogy std:: – így jelezzük a fordítónak, hogy ezt a nevet a standard könyvtárból szeretném.
Mi az a cout
A cout egy előre elkészített objektum a szabványkönyvtárban, amely a szabványos kimenetre (konzol/ablak) ír. Console output. Nekünk most elég annyi, hogy ez az a dolog, amivel kiírunk valamit a képernyőre.
Mi a <<?
A << „folyamba helyezés” operátora. Jelentése: tedd be ezt az adatot a kimeneti folyamba, balról jobbra dolgozik és láncolható:
Mind a két esetben ugyanaz lesz a kiírás – nem kell külön sorba újra kiíri az std::cout sort, elég csak ezzel << az operátorral felsorolni és a legvégét lezárni egy pontosvesszővel.
Új sor: std::endl vs 'n'
Mit csinálnak?
- ‘\n’ – egy új sor karakter. Simán sortörést jelent
- std::endl sort tör és mellette kiüríti a kimeneti puffert is. Ez akkor fontos, ha azonnal látni akarod a kiírást.
Mikor melyiket érdemes használni?
Alapból használd az ‘\n’ -t, mert gyorsabb, de ha biztosra akarsz menni, hogy a szöveg rögtön megjelenjen, akkor std::endl
Bemenet: std::cin
Gondolj az std::cin-re úgy, mint egy futószalagra (pufferre), amin karakterek érkeznek.
- A >> operátor a whitespace-ig (szóköz/Enter/Tab) olvas egy darabot.
- A getline Enterig olvas teljes sort (szóközökkel együtt)
- A get egy darab karaktert vesz le – akár szóközt vagy Entert is
Hova tegyük az adatot?
Szöveget std::string-be, számot int/double-ba teszünk. A változónév lehet betű, szám, alsóvonás, de nem kezdődhet számmal és nem lehet kulcsszó (pl. int, double, return stb.)
Mi történt itt? Csak a vezetéknevet vette be, mert a >> az első szóközig olvasott csak. Ha szeretnénk mind az egész sort megjeleníteni, akkor a megoldás az std::getline lesz
Számok beolvasása (int, double)
Az >> operátor szóközig olvas és rögtön megpróbálja átalakítani az értéket a cél típusára
Több adatot egymás után is bekérhetsz egy sorban – a >>-t mindegy, hogy szóköz, tab, vagy Enter választja el
Szóköz és Enter csapdák: std::ws és std::cin.ignore
Képzeld el a bemenetet (stdin) egy futószalagnak. Az >> operátor szóközig olvas (szóköz, Enter, Tab = whitespace), a soron következő whitespace-t pedig rajtahagyja a szalagon. Ezért van az, hogy szám beolvasása után egy std::getline néha üres sort kap: az előző Enter még ott csücsül elől.
Két egyszerű eszközünk van erre:
1.) std::ws – „whitespace-porszívó”
Az std::ws felfalja az elején álló whitespace-eket (Entert is)
Mikor jó?
Ha >> után egyból sorbeolvasás (getline) jön vagy ha nem baj, hogy minden kezdő szóközt is elnyel (pl. a felhasználó véletlenül beütött pár space-t)
2. std::cin.ignore
Az ignore kifejezetten arra való, hogy eldobjunk karaktereket a puffer elejéről. Klasszikus minta: dobt el a teljes sor maradékát (az Enterig), aztán olass getline-nel
Mikor jó?
Ha biztosan a sor végét szeretnéd kidobni (pl. >> után jön még egy getline, vagy ha a menüben/űrlapon szeretnéd letisztítani a sort egy rövid karakteres input után.
Mi történik?
Nem a számot dobjuk el, hanem azt, ami utána marad a pufferben – tipikusan az Entert, esetleges szóközöket, maradék karaktereket. Mindig van eldobnivaló amikor >>-val olvasol, mert a >> csak a tokenig eszik, a leválasztó (whitespace, ‘\n’) bent marad.
Tehát: írsz valamit, Entert nyomsz: akkor beírod: 5 + Enter
A pufferbe kerül [‘5’] [‘\n’]
beírod: int darab;
std::cin >> darab //megeszi az ‘5’-öt, a pufferben marad: [‘\n’]
Ha most rögtön jönne a std::getline(…), az az első karakterig a sor végéig olvas. De az első karakter már a ‘\n’, ezért üres sort kapsz. Ezeket ignoráljuk. Eldob mindent a sor végéig, beleértve az ‘\n’-t is, így az std::getline a következő sort kapja meg, nem az üreset.
Ha nagyon röviden kéne megfogalmazni: >> meghagyja a leválasztót, a maradékot el kell dobni. std::getline sorig olvas, ha elsőnek ‘\n’ van, üres lesz
Mikor használj std::ws-t és mikor std::cin.ignore-t?
Ha csak Enter maradt elől -> std::ws. Elég csak egy whitespace kiszippantása.
Ha a sorban maradék szöveg is lehet, akkor használd az ignore(…, ‘\n’) -t
Puskasor – C++ be és kimenet
-
std::cout << ...→ kiírás. Láncolható.'\n'gyors newline,std::endlnewline + puffer ürítés. -
std::cin >> x→ whitespace-ig olvas és konvertál -
std::getline(std::cin, s)→ teljes sor az Enterig (szóközökkel együtt). >>utángetlineelőtt:ignore(..., '\n')vagygetline(std::cin >> std::ws, s).
Mi jön ezután?
A következő fejezetben a változókról és típusokról beszélünk (egész, valós, karakter, szöveg; névadás, alapértelmezett értékek, típuskonverziók, const), hogy a most beolvasott értékeket jól tudjuk tárolni és számolni velük.
-
⬅️ Előző lecke: C++ main függvény – programváz, headerek
-
➡️ Következő lecke: C++ változók és típusok – int, double, char, std::string
-
🏠 Vissza az áttekintőhöz: C++ alapok – összes lecke
Ha máshol szeretnéd folytatni a C++ tanulást, itt válogathatsz
C++ változók és adattípusok
Eddig főként szöveggel dolgoztunk - most itt az idő, hogy számokat is tároljunk, számoljunk és mérjünk! A számítógép minden adatot a memóriájában tárol. Ez a memória apró bitekből, bájtokból áll. 1 bájt = 8 bit Egy bit lehet 0 vagy 1, tehát egyetlen biten kétféle...
C++ – Operátorok
Eddig már megtanultuk, hogyan tároljunk értéket változókban - most pedig megtanuljuk, hogyan számoljunk velük! A C++ igazi ereje abban rejlik, hogy a memóriában tárolt értékekkel műveleteket tudunk végezni: összeadni, kivonni, osztani, hasonlítani, logikai döntéseket...
C++ alapok: main függvény, programváz
Mielőtt belevágnánk a C++ témába, rakjunk rendet: mi az a forrásfájl, a C++ main függvény, hogyan néz ki a programváz, mik azok a headerek (#include <...>) és mit ad a C++ stardard library. Ha a környezeted még nincs kész, itt a két útmutató hozzá:– Dev-C++...




