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++ minimum keresés
A C++ minimum keresés az egyik legegyszerűbb, mégis irtó hasznos algoritmus, amit minden kezdő programozó megtanul. Lényege, hogy végigmegyünk egy értékhalmazon, és közben folyamatosan figyeljük, melyik a legkisebb szám. Ez pont olyan, mint amikor egy boltban...
C++ ciklusok – for és while egyszerűen
Képzeld el, hogy le kell írnod a táblára egy mondatot… mondjuk 100-szor.Vagy be kell kérned 6 futó adatait.Vagy ki kell írnod 1-től 1000-ig minden számot. Ezek mind olyan feladatok, amiket kézzel megcsinálni rémálom, de a számítógépnek egyetlen utasítás: 👉 „Ezt...
C++ feltételek
A programozás egyik legizgalmasabb pillanata az, amikor a kódod végre gondolkodni kezd. Tud dönteni. Tud választani. Tud reagálni arra, amit a felhasználó (vagy éppen a világ) elé tesz. És pontosan ezt hozzák el nekünk a C++ feltételek: az if, az else, az else if és a...



