C# programozás kezdőknek › 3. lecke C# tanfolyam · 3. lecke Most először a program kérdez, a felhasználó válaszol, a válasz pedig bekerül a programba. Megtanuljuk, hogyan lesz a begépelt szövegből szám, hogyan kerülnek változók egy mondatba, és mit tehetünk, ha valaki rossz adatot ír be.Adatbekérés C#-ban – Console.ReadLine, Parse és TryParse

A lecke végére
- adatot kérsz be a
Console.ReadLine()segítségével; - érted, miért szövegként érkezik be a begépelt adat;
int.Parse()ésdouble.Parse()segítségével számmá alakítod a megfelelő szöveget;- szöveginterpolációval változókat és számításokat illesztesz mondatokba;
- felismered a
FormatExceptionokát; TryParse()segítségével ellenőrzöd, sikerült-e az átalakítás.
Mielőtt elkezded
Erre a leckére akkor állsz készen, ha már ismered a változókat és a string, int, double, bool típusokat.
A program is kérdezhet
A Console.WriteLine() kiír valamit a konzolra. A Console.ReadLine() megvárja, hogy a felhasználó beírjon egy sort és megnyomja az Entert.
Console.WriteLine("Mi a neved?");
string nev = Console.ReadLine();
Console.WriteLine(nev);Te jössz!
Írd be a kódot, futtasd, majd válaszolj a program kérdésére. Figyeld meg: amit begépelsz, bekerül a nev változóba.
Zöld hullámvonal a ReadLine alatt?
Az újabb .NET-projektekben a Visual Studio ilyenkor egy CS8600 figyelmeztetést jelez. Ez nem hiba, a program lefut. Azt jelzi, hogy a Console.ReadLine() elméletben üres értéket (null) is adhat. Kezdőként nyugodtan továbbléphetsz; ha el szeretnéd tüntetni, írj string? típust: string? nev = Console.ReadLine();
A begépelt szám is először szöveg
Ha azt kérdezzük, hány éves vagy, és te 14-et írsz be, a Console.ReadLine() eredménye még nem int. A begépelt sort szövegként kapjuk meg.
Console.WriteLine("Hány éves vagy?");
string eletkor = Console.ReadLine();
Console.WriteLine(eletkor);7 + 1 nem mindig 8
Mi történik, ha a felhasználó 7-et ír be, de az adat még string?
string szamSzoveg = Console.ReadLine();
Console.WriteLine(szamSzoveg + 1);Ha a bemenet A 7, a kimenet 71. Itt nem számtani összeadás történik: a szöveghez hozzáfűződik az 1.Miért 71 és nem 8?
szamSzoveg értéke szövegként "7". A + ilyenkor szöveg-összefűzésként működik, ezért "7" + 1 eredménye "71".
Szövegből szám: int.Parse()
Ha számolni szeretnénk a begépelt adattal, megfelelő számtípussá kell alakítanunk.
Console.WriteLine("Hány éves vagy?");
string eletkorSzoveg = Console.ReadLine();
int eletkor = int.Parse(eletkorSzoveg);
Console.WriteLine(eletkor + 1);"14".int, például 14.15.Működik!
A "14" szövegből 14 egész szám lett, így már számolhatunk vele.
Rövidebb forma
Ha már érted a két lépést, gyakran egy sorban is látod:
int eletkor = int.Parse(Console.ReadLine());Tanuláskor a hosszabb forma sokszor átláthatóbb.
Szöveginterpoláció: változók a mondatban
A szöveg elé írt $ jel lehetővé teszi, hogy kapcsos zárójelek között változókat vagy akár számításokat illesszünk a mondatba.
string nev = "Bori";
int eletkor = 14;
Console.WriteLine($"Szia, {nev}! Jövőre {eletkor + 1} éves leszel.");Próbáld ki!
Kérd be a nevedet és az életkorodat, alakítsd az életkort int-té, majd írd ki interpolációval, hány éves leszel jövőre.
Tizedes szám bekérése: double.Parse()
Ha tört értéket szeretnél bekérni, például futási időt vagy testmagasságot, használhatod a double.Parse() metódust.
Console.WriteLine("Add meg a futó idejét percben!");
string idoSzoveg = Console.ReadLine();
double ido = double.Parse(idoSzoveg);
Console.WriteLine($"A futó ideje: {ido} perc.");Pont vagy vessző?
A C# forráskódban egy tizedes literált ponttal írunk, például double x = 4.6;. A double.Parse() viszont a gép területi beállításait is figyelembe veszi. Magyar környezetben a felhasználói bemenet gyakran 4,6 formában működik, míg 4.6 hibát okozhat.
Ez gépfüggő viselkedés, ezért más beállítású számítógépen eltérhet.
Jósolj, aztán futtasd!
Minden kódnál először írd le a várható kimenetet. Ha bemenetet is kér a program, a megadott értéket írd be. Ezután futtasd le, és hasonlítsd össze a jóslatoddal. Eltérésnél keresd meg a pontos sort, ahol másra számítottál.
1. Szöveg vagy szám?
A program bemenetként 7-et kap. Mi jelenik meg két külön sorban?
string adat = Console.ReadLine();
Console.WriteLine(adat + 1);
Console.WriteLine(int.Parse(adat) + 1);Jóslat ellenőrzése
Az első sor 71, mert az adat szöveg. A második 8, mert a Parse() után már egész számhoz adunk egyet.
2. Az átalakítás helye
Bemenet: 12. Mi lesz a két kiírt érték?
string szoveg = Console.ReadLine();
int szam = int.Parse(szoveg);
Console.WriteLine(szoveg + 2);
Console.WriteLine(szam + 2);Jóslat ellenőrzése
122, majd 14. Az átalakítás új változóba tette a számot; a szoveg továbbra is szöveg.
3. Jövőre hány éves?
Mi lesz a teljes mondat?
string nev = "Bori";
int kor = 13;
Console.WriteLine($"Szia, {nev}! Jövőre {kor + 1} éves leszel.");Jóslat ellenőrzése
Szia, Bori! Jövőre 14 éves leszel. A kapcsos zárójelben lévő összeadás még a kiírás előtt megtörténik.
4. Mi történik a dollárjel nélkül?
Figyeld meg a két sor közti egyetlen karakteres különbséget.
int kedvenc = 8;
Console.WriteLine("A kedvenc számom: {kedvenc}");
Console.WriteLine($"A kedvenc számom: {kedvenc}");Jóslat ellenőrzése
Először szó szerint A kedvenc számom: {kedvenc} látszik, utána A kedvenc számom: 8. A $ kapcsolja be az interpolációt.
5. Sikerül az átalakítás?
Futtasd kétszer: először 15, utána tizenöt bemenettel. Írd le mindkét alkalommal a két sort.
string adat = Console.ReadLine();
bool sikerult = int.TryParse(adat, out int kor);
Console.WriteLine(sikerult);
Console.WriteLine(kor);Jóslat ellenőrzése
15 esetén True és 15. tizenöt esetén False és 0 jelenik meg. A 0 itt a sikertelen TryParse() eredményváltozójának alapértéke, nem a felhasználó életkora; a sikerult értékét mindig ellenőrizni kell.
Mi történik hibás adatnál?
Az int.Parse() és a double.Parse() csak akkor működik, ha a szöveg valóban átalakítható a kért számtípussá.
string adat = "Tizennégy";
int eletkor = int.Parse(adat);Ilyenkor FormatException keletkezik, mert a "Tizennégy" szöveg nem írható át közvetlenül egész számmá.
Hibavadászat
Ha a program a Parse() soron áll meg, először nézd meg, milyen adat érkezett be. Gyakran nem a kód szintaxisa rossz, hanem a felhasználó olyan szöveget adott meg, amely nem alakítható számmá.
Biztonságosabb ellenőrzés: TryParse()
Console.WriteLine("Add meg az életkorodat!");
string adat = Console.ReadLine();
bool sikerult = int.TryParse(adat, out int eletkor);
Console.WriteLine(sikerult);
Console.WriteLine(eletkor);true, ha az átalakítás sikerült; különben false.eletkor változóba kerül.True, az eletkor értéke 14.False; a program nem dob FormatException-t.Ez már stabilabb
A TryParse() nem dönti el helyetted, mi történjen rossz adatnál, de jelzi, hogy sikerült-e az átalakítás. A következő leckék egyikében az if segítségével már reagálni is fogunk erre.
Hibakeresés: te vagy a hibadetektív
Mielőtt lenyitod a megoldást, jósolj: fordítási hiba, futás közbeni hiba vagy rossz eredmény várható? Keresd meg a hibás sort, javítsd, majd futtasd le a kódot.
1. Hiányzó pontosvessző
Console.WriteLine("Hány éves vagy?")
string adat = Console.ReadLine();
int kor = int.Parse(adat);Hiba és javítás
Fordítási hiba. Az első sor végére pontosvessző kell: Console.WriteLine("Hány éves vagy?");. A jelzett sor mellett az előzőt is ellenőrizd.
2. Betűkkel írt szám
string adat = "tizennégy";
int kor = int.Parse(adat);
Console.WriteLine(kor);Hiba és javítás
Futás közbeni FormatException. Az int.Parse() számjegyekkel írt egész számot vár, például "14". Felhasználói bemenetnél a TryParse() eredményét is ellenőrizd.
3. Furcsa jövő évi életkor
string kor = "13";
Console.WriteLine("Jövőre: " + kor + 1);Hiba és javítás
Rossz eredmény: Jövőre: 131. Javítás: int eletkor = int.Parse(kor);, majd Console.WriteLine($"Jövőre: {eletkor + 1}");.
4. A változó neve jelenik meg
string nev = "Bori";
Console.WriteLine("Szia, {nev}!");Hiba és javítás
Rossz eredmény: szó szerint Szia, {nev}!. Javítás: Console.WriteLine($"Szia, {nev}!");.
5. Jó bemenet, rossz változó
string adat = Console.ReadLine();
int eletkor = 0;
int.Parse(adat);
Console.WriteLine(eletkor);Hiba és javítás
A 15 bemenet után is 0 jelenik meg, mert a Parse() visszatérési értékét eldobtuk. Javítás: eletkor = int.Parse(adat);.
6. A TryParse eredménye
string adat = Console.ReadLine();
int.TryParse(adat, out int kor);
Console.WriteLine($"Te {kor} éves vagy.");Hiba és javítás
Ha a felhasználó szám helyett például az alma szót írja be, a TryParse() sikertelen lesz, a kor értéke pedig 0 marad. Tárold a visszatérési értéket: bool sikerult = int.TryParse(adat, out int kor);. Ellenőrizd a sikerult értékét; később if-fel csak siker esetén írj életkort.
Plusz próba: az 5. és 6. kódot futtasd üres, majd szóközökkel körbevett bemenettel is. Jegyezd fel, melyik esetben hibázik a program, és melyikben kapod a várt értéket.
Mini projekt: Profilgenerátor
Készíts programot, amely bekéri a nevet, az életkort és a kedvenc számot. Az életkort és a kedvenc számot alakítsd egész számmá, majd jeleníts meg személyes üzeneteket.
Console.WriteLine("Mi a neved?");
string nev = Console.ReadLine();
Console.WriteLine("Hány éves vagy?");
string eletkorSzoveg = Console.ReadLine();
Console.WriteLine("Mi a kedvenc számod?");
string szamSzoveg = Console.ReadLine();
int eletkor = int.Parse(eletkorSzoveg);
int szam = int.Parse(szamSzoveg);
Console.WriteLine($"Szia, {nev}!");
Console.WriteLine($"Jövőre {eletkor + 1} éves leszel.");
Console.WriteLine($"A kedvenc számod kétszerese: {szam * 2}");Ne csak futtasd: változtasd meg a kérdéseket, kérj be más adatot is, és alakítsd át a kimenetet a saját ötleted szerint.
Önálló gyakorlófeladatok
Először készíts saját megoldást. A lenyitható rész csak ellenőrzéshez van.
1. Játékosprofil
Kérd be a játékos nevét, életkorát és pontszámát. Az életkort és a pontszámot alakítsd int típussá. Írd ki a játékos adatait, majd azt is, mennyi pontja lenne 100 bónuszponttal.Egy lehetséges megoldás
Console.WriteLine("Játékos neve?");
string nev = Console.ReadLine();
Console.WriteLine("Életkor?");
int eletkor = int.Parse(Console.ReadLine());
Console.WriteLine("Pontszám?");
int pont = int.Parse(Console.ReadLine());
Console.WriteLine($"{nev}, {eletkor} éves, pontszám: {pont}.");
Console.WriteLine($"Bónusszal: {pont + 100}.");
2. Futóedzés
Kérd be a futó nevét, a futott távot kilométerben és a futási időt percben. A táv és az idő legyen double. Írd ki az adatokat, majd azt is, hány kilométer lenne két ugyanilyen edzés összesen.Egy lehetséges megoldás
Console.WriteLine("Futó neve?");
string nev = Console.ReadLine();
Console.WriteLine("Táv kilométerben?");
double tav = double.Parse(Console.ReadLine());
Console.WriteLine("Idő percben?");
double ido = double.Parse(Console.ReadLine());
Console.WriteLine($"{nev} {tav} km-t futott {ido} perc alatt.");
Console.WriteLine($"Két edzésen: {tav * 2} km.");
3. Hibadetektív
Kérd be a felhasználó nevét, életkorát és kedvenc számát. Az utóbbi kettőnél használj int.TryParse()-t. Írd ki, hogy az egyes átalakítások sikerültek-e, majd futtasd le egyszer számokkal és egyszer hibás szöveges adattal.Egy lehetséges megoldás
Console.WriteLine("Mi a neved?");
string nev = Console.ReadLine();
Console.WriteLine("Életkor?");
bool eletkorOk = int.TryParse(Console.ReadLine(), out int eletkor);
Console.WriteLine("Kedvenc szám?");
bool szamOk = int.TryParse(Console.ReadLine(), out int szam);
Console.WriteLine($"Szia, {nev}!");
Console.WriteLine($"Életkor rendben: {eletkorOk}");
Console.WriteLine($"Kedvenc szám rendben: {szamOk}");
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. A begépelt sort szövegként kezeljük, ezért kezdő példáinkban 71, mert szöveg-összefűzés történik. Egy megfelelő formájú szöveget egész számmá alakít. Bekapcsolja a szöveginterpolációt, így a kapcsos zárójelek között változókat és kifejezéseket használhatunk. Egy 1. Milyen típusú adatot kapunk közvetlenül a Console.ReadLine() használatakor?
string változóba tesszük.2. Ha a szamSzoveg értéke "7", mit ír ki a szamSzoveg + 1?
3. Mire való az int.Parse()?
4. Mit jelent a $ jel a $"Szia, {nev}!" előtt?
5. Mi történhet, ha int.Parse()-nak "Tizennégy" szöveget adunk?
FormatException keletkezik, mert a szöveg nem alakítható közvetlenül egész számmá.6. Mit ad vissza az int.TryParse()?
bool értéket, amely jelzi, sikerült-e az átalakítás; siker esetén az out változóba kerül a szám.
Mit tudsz már?
- Adatot kérsz be a felhasználótól.
- Megkülönbözteted a beolvasott szöveget a valódi számtól.
int.Parse()ésdouble.Parse()segítségével számot készítesz a szövegből.- Interpolált mondatokat írsz változókkal és számításokkal.
- Felismered a hibás formátum okozta
FormatException-t. TryParse()segítségével ellenőrzöd, sikerült-e a konverzió.
Gyakorolnál még? 2.1 kiegészítő lecke
Ha a TryParse és a true–false eredmény még nem teljesen világos, nézd meg a Bool és TryParse – sikerült vagy nem? gyakorlóleckét: sok rövid jóslásos feladattal és határesetekkel.
Következő lecke: Operátorok
Most már adatokat tudunk bekérni és számmá alakítani. Következőként megtanuljuk, hogyan számoljunk velük, hogyan hasonlítsuk össze őket, és hogyan módosítsuk az értéküket.






