B blokk · Változók és típusok · 5. tananyag
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.
WriteLine
egy számot ír ki.:F2,
:N0,
:P0.{ertek,10} és
{nev,-12}.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.
A B4-es interpoláció kapcsos zárójelében a kifejezés után kettősponttal formátumot adhatsz meg:
| Formátum | Mit csinál? | Példa (magyar gépen) |
|---|---|---|
:F2 | Fix számú (itt 2) tizedesjegy | $"{899.5m:F2}" → 899,50 |
:F0 | tizedesjegy nélkül, kerekítve | $"{3.7:F0}" → 4 |
:N0 | ezres tagolás (Number) | $"{1234567:N0}" → 1 234 567 |
:P0 | szá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
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!
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.)
Milyen formázás kell a kívánt kimenethez? A táblázat segít!
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:
{ertek,10} — az érték 10 karakter széles
mezőben, jobbra igazítva;{ertek,-10} — ugyanez balra igazítva;{ar,10:F2}.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.
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.
| Tünet | Mi történt? | Mit tegyél? |
|---|---|---|
2538,73 helyett 2 538,73 kellene | az F nem tagol ezresenként | N2 — az N tagol, az F nem |
A {ar F2} hibát dob | lemaradt a kettőspont | {ar:F2} |
{ar:F2} helyett {ar,F2}-t írtál | a 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 ír | nem — a :P a 0–1 közti arányhoz való, és Ő szoroz 100-zal | a 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öveti | ez a helyes működés — a kódbeli pont ≠ kimeneti formátum |
Kassza, .NET 10.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}");
Kasszablokk igazitott oszlopokkal).A blokkod oszlopai egy vonalban állnak, az ÁFA-sor
27%-ot ír, és tudod, mitől vessző a kimenetben
a tizedes.
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás
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}"
Í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.
Ó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.
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).
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.
Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.
| Fogalom | Jelenté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átum | fix tizedesjegyszám, ezres tagolás nélkül |
N formátum | ezres tagolás + tizedesjegyek |
P formátum | szá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ő!) |
WriteLine bármit kiír, mert mindennek van
ToString()-je — a „minden
objektum” elv napi gyakorlatban.:F2
fix tizedes, :N0 ezres tagolás,
:P0 százalék (és Ő szoroz
100-zal).{ertek,10} jobbra,
{nev,-12} balra; kombinálva
{ar,10:F2}. Szöveg balra, szám
jobbra — és kész a táblázat.