Vezérlőpult
B7. Beolvasás konzolról · Változók és típusok

B blokk · Változók és típusok · 7. tananyag

Beolvasás konzolról: ReadLine, ReadKey

Eddig a programjaink nem kommunikáltak a külvilággal. Mától párbeszéd lesz: a program kérdez, megáll, vár — és azzal dolgozik, amit a felhasználó válaszol neki. Az A1-ben mutatott „Hogy hívnak?” programot ma megépíted dinamikus adatbekéréssel — a B6-ban megismert konverziós lehetőségeket pedig azonnal munkára fogjuk.

1 tanóraAz első párbeszédA TryParse élesben

Tanulási célok

1Console.ReadLine() — a program megáll és figyel

A ReadLine a Console beolvasó metódusa: megállítja a programot, és addig vár, amíg a felhasználó gépel valamit és Entert üt. Amit kapott, azt stringként adja vissza:

Console.Write("Hogy hívnak? ");
string nev = Console.ReadLine();
Console.WriteLine($"Szia, {nev}! Kezdjük a C#-ot!");

Ismerős? Ez az A1-ben mutatott „ilyen lesz majd” kódpélda.

Két apró, de fontos részlet:

  1. A prompt Write, nem WriteLine (A6): így a kurzor a kérdés mellett villog, nem alatta — a párbeszéd természetesnek hat.
  2. Ha a felhasználó csak Entert üt, a ReadLine üres stringet ("" — B4) ad — a program nem áll meg, csak üres szöveggel dolgozik tovább.
ℹ️ JÓ TUDNI

A Visual Studio zöld hullámmal figyelmeztethet a string nev = Console.ReadLine(); sorra (CS8600): a ReadLine különleges helyzetben null-t is adhatna. Ez figyelmeztetés, nem hiba — a program lefordul és fut. A null kezelését a H blokkban tanuljuk rendesen; addig ezt a figyelmeztetést nyugodtan tudomásul veheted.

2Számot kérünk — a B6 konverziói munkában

A ReadLine mindig stringet ad — a begépelt 25 is "25". Számoláshoz a szöveget előbb számmá kell alakítani (B6):

Console.Write("Hány éves vagy? ");
string valasz = Console.ReadLine();
int eletkor = int.Parse(valasz);

Console.WriteLine($"Jövőre {eletkor + 1} leszel.");

Elgépelésre felkészülve — ugyanez TryParse-szal:

Console.Write("Hány éves vagy? ");
string valasz = Console.ReadLine();
bool sikerult = int.TryParse(valasz, out int eletkor);

Console.WriteLine($"Sikeres beolvasás: {sikerult}");
Console.WriteLine($"Jövőre {eletkor + 1} leszel.");

Hibás inputnál a sikerult False, az eletkor 0 — a program fut tovább. Az igazi reakció („kérem újra!”) a C blokk if-jével jön.

⚠️ KULTÚRA (B5–B6 VISSZAKÖSZÖN)

Ha double-t kérsz be, a magyar beállítású gépen a felhasználó tizedesvesszővel gépeljen (3,5) — a double.Parse/TryParse ezt várja (B6). A kódbeli pont (B1) a programozó világa; a felhasználóé a saját nyelvi beállítása.

3Console.ReadKey() — egyetlen billentyű

Néha nem egy sor kell, hanem egyetlen billentyűleütés — Enter nélkül, azonnal:

Console.Write("Nyomj meg egy billentyűt: ");
ConsoleKeyInfo billentyu = Console.ReadKey();
Console.WriteLine();
Console.WriteLine($"Ezt nyomtad: {billentyu.KeyChar}");
Console.WriteLine("A folytatáshoz nyomj meg egy billentyűt...");
Console.ReadKey(true);

A Mastermindban (G blokk) a tippeket lehet majd így, billentyűnként is fogadni.

Igaz vagy hamis?

Döntsd el a beolvasásról szóló állításokról!

1 / 8Pontszám: 0
…

4A beolvasás négylépéses mintája

Mostantól minden interaktív programunk ezt a receptet követi:

LépésEszközHonnan ismered?
1. Kérdezz (prompt)Console.Write("… ")A6, B5
2. Olvass beConsole.ReadLine()ez a fejezet
3. Konvertáljint.TryParse(…) / ParseB6
4. VálaszoljConsole.WriteLine($"…")B4–B5

Kérdezz — olvass — konvertálj — válaszolj. Négy sor, és a program beszélget.

5Gyakori hibák

TünetMi történt?Mit tegyél?
A beolvasott „számmal” nem lehet számolni ("25" + 1 → 251)a ReadLine stringet adott (B4 fűzés!)konvertálj: Parse/TryParse (B6)
FormatException beolvasás utána felhasználó elgépelte, a Parse kivételt dobottfelhasználói inputhoz TryParse
A kérdés után a kurzor új sorba ugrika promptot WriteLine-nal írtadprompt = Write
A kiírásban System.ConsoleKeyInfo jelenik megaz egész ConsoleKeyInfo-t írtad kia karakterhez .KeyChar kell
Magyar gépen a 3.5 bevitel hibát ada kultúra tizedesvesszőt vár (B6)a felhasználó 3,5-öt gépeljen
Zöld hullám a ReadLine soron (CS8600)a fordító a lehetséges null-ra figyelmeztetfigyelmeztetés, nem hiba — részletek a H blokkban

6Gyakorlat — az első párbeszédes programod

  1. Új projekt: Console App, név: Parbeszed, .NET 10.
  2. Építsd fel a „bemutatkozó botot” a négylépéses mintával:
Console.Write("Hogy hívnak? ");
string nev = Console.ReadLine();

Console.Write("Hány éves vagy? ");
bool korOk = int.TryParse(Console.ReadLine(), out int eletkor);

Console.Write("Milyen magas vagy méterben (pl. 1,72)? ");
bool magassagOk = double.TryParse(Console.ReadLine(), out double magassag);

Console.WriteLine();
Console.WriteLine($"{"Név:",-14}{nev,>0}");
Console.WriteLine($"{"Életkor:",-14}{eletkor} év (beolvasva: {korOk})");
Console.WriteLine($"{"Magasság:",-14}{magassag:F2} m (beolvasva: {magassagOk})");

Console.WriteLine();
Console.WriteLine("A kilépéshez nyomj meg egy billentyűt...");
Console.ReadKey(true);
⚠️ HIBAVADÁSZ-PRÓBA

A {nev,>0} részlet szándékos elgépelés — javítsd sima {nev}-re, mielőtt futtatsz! Ha a fordító hibajelzésén akadt meg először a szemed: jól működnek az A6-os reflexeid.

  1. Futtasd többször: jó adatokkal, elgépelt életkorral (sok), vesszős és pontos magassággal. Figyeld a korOk/magassagOk értékét!
  2. Tegyél töréspontot a TryParse-os sorra, és a Locals-ban (B1) nézd meg, mi kerül a változókba jó és rossz inputnál.
  3. Commitold (Parbeszedes program ReadLine-nal).
✅ ELLENŐRZŐ PONT

A botod végig lefut elgépelt inputtal is; a magasság vesszős gépeléssel jött be; a program billentyűnyomásra lép ki.

7Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

B7.1⭐

Kérdezd meg a felhasználó nevét és városát, majd köszöntsd egy mondatban interpolációval.

B7.2⭐

Kérj be két egész számot, és írd ki az összegüket és a szorzatukat. (Parse elég — most te vagy a felhasználó, ne gépelj el semmit!)

B7.3⭐⭐

Téglalap-kalkulátor: kérd be a két oldalt double-ként (figyelem: vesszővel gépelendő!), és írd ki a kerületet és a területet 2 tizedesjegyre formázva (B5).

B7.4⭐⭐

Írd át a B7.2-t TryParse-osra, és írasd ki mindkét sikerult értéket is. Gépeld el szándékosan az egyiket — mi lett az összeg, és miért?

B7.5⭐⭐⭐

„Jelszómező-imitáció”: olvass be 5 karaktert egyenként ReadKey(true)-val (5 külön sorban), minden leütés után írj ki egy *-ot Write-tal, végül írd ki az összegyűjtött szót. (Tipp: fűzd a karaktereket egy stringhez: jelszo = jelszo + billentyu.KeyChar;)

8Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

9Fogalomtár

FogalomJelentés
bemenet (input)az adat, amit a program futás közben a felhasználótól kap
interaktív programa felhasználóval párbeszédet folytató program
ReadLine()egy sor beolvasása Enterig — a visszatérés mindig string
prompta beolvasás előtt kiírt kérdés — Write-tal, hogy a kurzor mellette maradjon
ReadKey()egyetlen billentyű beolvasása, Enter nélkül
ConsoleKeyInfoa ReadKey visszatérési típusa — a .KeyChar adja a karaktert
ReadKey(true)mint a ReadKey, de a lenyomott billentyű nem íródik ki
beolvasási mintakérdezz (Write) → olvass (ReadLine) → konvertálj (TryParse) → válaszolj ($"…")

10Összegzés

  1. A ReadLine megállítja a programot, Enterig vár, és mindig stringet ad — üres Enternél üres stringet.
  2. A prompt Write-tal készül: a kurzor a kérdés mellett villog.
  3. Számoláshoz a beolvasott szöveget konvertálni kell — felhasználói inputhoz TryParse (B6), és magyar gépen a tört vesszővel gépelendő.
  4. A ReadKey egyetlen billentyűt ad (ConsoleKeyInfo.KeyChar); a ReadKey(true) némán — „nyomj egy gombot” képernyőkhöz és jelszóbevitelhez.
  5. A minta, amire minden épül: kérdezz → olvass → konvertálj → válaszolj.
  6. A ReadLine zöld figyelmeztetése (CS8600) nem hiba — a null kezelését a H blokkban tanuljuk meg rendesen.