Vezérlőpult
B5. Konzolra írás: a Console osztály · Változók és típusok

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

Konzolra írás: a Console osztály

A WriteLine-t az első napod óta használod — de eddig csak a felszínét. Ma jönnek a mesterfogások: számformázás, ezres tagolás, táblázatos oszlopok — vagyis hogyan lesz a kimenetből rendezett, olvasható felület. A Mastermind táblája ezekből épül majd.

1 tanóraFormázás és igazításTáblázatos kimenet

Tanulási célok

1A Console — újra bemutatkozik

A Console osztály (BCL — A3) a konzolablak „szócsöve”. A kiíró hármast már ismered (A6): WriteLine (kiír + új sor), Write (kiír, marad a sorban), WriteLine() (üres sor). Amit még nem mondtunk ki: a WriteLine bármit elfogad:

Console.WriteLine("szöveg");     // stringet
Console.WriteLine(42);           // számot
Console.WriteLine(3.14);         // törtet
Console.WriteLine(true);         // logikai értéket — "True" jelenik meg

Hogyan? Minden objektum (A3): minden érték tudja a ToString()-et — a WriteLine a háttérben pontosan ezt hívja meg, és a kapott szöveget írja ki.

2Számformázás az interpolációban

A B4-es interpoláció kapcsos zárójelében a kifejezés után kettősponttal formátumot adhatsz meg:

FormátumMit csinál?Példa (magyar gépen)
:F2Fix számú (itt 2) tizedesjegy$"{899.5m:F2}" → 899,50
:F0tizedesjegy nélkül, kerekítve$"{3.7:F0}" → 4
:N0ezres tagolás (Number)$"{1234567:N0}" → 1 234 567
:P0százalék (Percent) — 100-zal szoroz!$"{0.27:P0}" → 27%
decimal ar = 2538.729m;
Console.WriteLine($"Fizetendő: {ar:F2} Ft");     // Fizetendő: 2538,73 Ft
Console.WriteLine($"Kerekítve: {ar:F0} Ft");     // Kerekítve: 2539 Ft
⚠️ REJTETT CSAPDA — B2-ESEKNEK

Mit szólna a fordító ehhez: int nezettseg = 4500000000;? Bizony — 4,5 milliárd az int-be (B2) nem fér: ide long kell. A formázás nem ment meg a rossz típustól!

ℹ️ KÓDBAN PONT, KIMENETEN VESSZŐ?

Igen, és ez nem hiba! A kódban a tizedes elválasztó mindig pont (899.5m — B1), a kiírás viszont a futtató gép nyelvi beállítását követi: magyar Windowson tizedesvessző és szóközös ezres tagolás jelenik meg. Ez pont jó így — a felhasználó a saját megszokása szerint látja a számokat. (A beolvasásnál lesz ebből izgalom — B6–B7.)

Melyik formázóval?

Milyen formázás kell a kívánt kimenethez? A táblázat segít!

1 / 8Pontszám: 0
…

3Igazítás — táblázatos kimenet

A B4.4 feladatban \t-kkel igazítottál, és láttad: hosszú névnél szétcsúszik. Az igazi eszköz az interpoláció mezőszélessége — vessző után írod:

string t1 = "kenyér";
string t2 = "trappista sajt";
decimal a1 = 899.5m;
decimal a2 = 3149.9m;

Console.WriteLine($"{"Termék",-16}{"Ár",10}");
Console.WriteLine($"{t1,-16}{a1,10:F2}");
Console.WriteLine($"{t2,-16}{a2,10:F2}");

Kimenet — a hosszú név sem csúsztatja szét:

Termék                  Ár
kenyér              899,50
trappista sajt     3149,90

Ökölszabály: szöveg balra (negatív), szám jobbra (pozitív). Így néznek ki a nyomtatott számlák is — és így fog kinézni a Mastermind eredménytáblája.

ℹ️ ELŐZETES

A Console írni is tud színesben (ForegroundColor), és a kurzort is mozgatja — ez a B8, a színes konzol fejezete. A stringek saját igazítói (PadLeft, PadRight) pedig az I. blokkban jönnek.

4Gyakori hibák

TünetMi történt?Mit tegyél?
2538,73 helyett 2 538,73 kelleneaz F nem tagol ezresenkéntN2 — az N tagol, az F nem
A {ar F2} hibát doblemaradt a kettőspont{ar:F2}
{ar:F2} helyett {ar,F2}-t írtála vessző az igazításé, a kettőspont a formátuméigazítás: {ar,10} · formátum: {ar:F2} · együtt: {ar,10:F2}
A :P0 „százszor akkora” számot írnem — a :P a 0–1 közti arányhoz való, és Ő szoroz 100-zala 0.27-re 27%-ot ad; kész százalékértékre (27) ne használd
„A gépem vesszőt ír, pedig pontot írtam”a kimenet a gép nyelvi beállítását követiez a helyes működés — a kódbeli pont ≠ kimeneti formátum

5Gyakorlat — kasszablokk 3.0

  1. Új projekt: Console App, név: Kassza, .NET 10.
  2. Vedd elő a B3-as bevásárlás-számolót, és írd újra igazított oszlopokkal:
decimal kenyer = 899.50m;
decimal tej = 429.90m;
decimal trappista = 3149.90m;
decimal osszesen = kenyer + tej + trappista;
const decimal AfaKulcs = 0.27m;

Console.WriteLine($"{"Termék",-16}{"Ár",10}");
Console.WriteLine($"{"kenyér",-16}{kenyer,10:F2}");
Console.WriteLine($"{"tej",-16}{tej,10:F2}");
Console.WriteLine($"{"trappista",-16}{trappista,10:F2}");
Console.WriteLine();
Console.WriteLine($"{"ÖSSZESEN",-16}{osszesen,10:F2}");
Console.WriteLine($"ÁFA-kulcs: {AfaKulcs:P0}");
  1. Figyeld meg a kimenetet: a számok tizedesvesszővel, jobbra zárva, egymás alatt — mint egy igazi blokkon.
  2. Játssz a szélességekkel: mi történik, ha a mező keskenyebb, mint az érték? (Semmi dráma: a mező kitágul — az igazítás csak minimum-szélesség.)
  3. Commitold (Kasszablokk igazitott oszlopokkal).
✅ ELLENŐRZŐ PONT

A blokkod oszlopai egy vonalban állnak, az ÁFA-sor 27%-ot ír, és tudod, mitől vessző a kimenetben a tizedes.

6Feladatok

Gyakorló feladatok

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

B5.1⭐

Mit ír ki magyar beállítású gépen? Előbb papíron! $"{1234.5:F2}" · $"{1234.5:F0}" · $"{1234567:N0}" · $"{0.5:P0}"

B5.2⭐

Írd ki a saját adataid „személyi kartonként”, kulcs–érték oszlopokkal: a kulcsok 14 szélesen balra, az értékek 20 szélesen jobbra.

B5.3⭐⭐

Órarend-sor: string tantargy, int terem, double atlag változókból írj ki egy sort így: a tantárgy 20 szélesen balra, a terem 6 szélesen jobbra, az átlag 8 szélesen jobbra, 1 tizedesjeggyel.

B5.4⭐⭐

A B2-es perc-átszámítód kimenetét csinosítsd meg: 4321 perc = 72 óra 1 perc helyett írjon igazított, kétsoros „táblázatot” (Óra / Perc fejléccel).

B5.5⭐⭐⭐

Nyomozás: írasd ki ugyanazt az értéket (1234.56) :F2, :N2 és formátum nélkül. Mi a különbség a három kimenet között? Fogalmazd meg egy-egy mondatban, mikor melyiket használnád.

7Önellenőrző kvíz

Ellenőrizd magad!

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

8Fogalomtár

FogalomJelentés
ToString()minden érték szöveges alakja — a WriteLine a háttérben ezt hívja
formátumjelzőaz interpolációban kettőspont után: {ertek:F2}
F formátumfix tizedesjegyszám, ezres tagolás nélkül
N formátumezres tagolás + tizedesjegyek
P formátumszázalék: a 0–1 közti arányt 100-zal szorozva, %-jellel írja
mezőszélesség (igazítás)vessző után: {ertek,10} jobbra, {ertek,-10} balra igazít
kultúra (nyelvi beállítás)a gép területi beállítása — a kimenet számformátumát ez adja (tizedesvessző!)

9Összegzés

  1. A WriteLine bármit kiír, mert mindennek van ToString()-je — a „minden objektum” elv napi gyakorlatban.
  2. Formázás az interpolációban: :F2 fix tizedes, :N0 ezres tagolás, :P0 százalék (és Ő szoroz 100-zal).
  3. Kódban pont, kimeneten vessző — a kiírás a gép nyelvi beállítását követi, és ez így helyes.
  4. Igazítás: {ertek,10} jobbra, {nev,-12} balra; kombinálva {ar,10:F2}. Szöveg balra, szám jobbra — és kész a táblázat.
  5. A mezőszélesség minimum: ha az érték hosszabb, a mező tágul.