Jó reggelt mindenkinek !

Megin' én vagyok. Nem szeretek bekezdést írni, nem is tudok, és most nincs is kedvem, úgyhogy "in medias rex" (ez azt akarja jelenteni, hogy bele a közepébe (már kiskoromban felfigyeltek hatalmas műveltségemre...), persze lehet, hogy rosszul írtam) csak úgy elkezdem.

Tehát a programunk:

#include <stdio.h>
int main(void)
{
printf(" Ha ezt a sort el tudja olvasni, nincs szüksége szemüvegre \n");
return(0);
}

A magyarázat:

Már az első sorban szembetalálkozunk egy ismeretlen dologgal. Az include hasonló, mint a turbo pascalnál a uses. Pontosan: C nyelvű szövegfile-ok fordítás közbeni beemelése. Olyan mintha az includ-dal beemelt file-ok tartalma saját programunk része lenne, így hivatkozhatunk az adott file-ban tárolt függvényekre, konstansokra, változókra. Esetünkben az stdio.h file-ra van szükségünk, ez a headerfile tartalmazza az alapvető input, output kezelést, így a formázott kiírást (printf) is. Erről ennyit.

Aztán jön az a sor hogy, int main(void). Jó mi ? Az int a függvény visszatérései értékének típusa (típusok ld. előző cikk), main a függvénynév (főprogram), a void azt jelenti, hogy nincsenek paraméterek. a void-ot nem muszáj odaírni, de így hosszabb a cikk.

És már itt is a program lényege. A printf függvénnyel kiíratunk egy sort. A \n nem a szöveg része, hanem a printf-nek parancs. Ahogy ígértem most ezekkel a parancsokkal fogunk megismerkedni.

\n soremelés \r kocsivissza

\t vízszintes tabulátor \v függőleges tabulátor

\f lapdobás \b cursor visszaléptetése (backspace)

\' egyes idézőjel \" kettős idézőjel

\Onn az nn oktális kódú karakter kiírása \Xnn az nn hexa kódú karakter kiírása

\\ \ jel kiírása

A return megadja a függvény visszatérési értékét. Ezt is el lehet hagyni, ha a függvény nem szolgáltat visszatérési értéket, ahogy esetünkben is.

Ez eddig szép és jó, de mi van, ha én egy művelet eredményét akarom kiíratni ? Erre is ad megoldást a printf, ehhez meg kell ismernünk a változók használatát.

ÍME:

#include <stdio.h>
int main(void)
{
int a,b,c;
int sum;
/*változódefiníciók*/ 
a=1;b=2;c=3; /*értékadások*/
sum=a+b+c; /*művelet*/ 
printf(" Az összeg: %d\n",sum); /*kiírás*/
return(0);
}

Az első három sor már jó ismerősünk, utána jönnek a zavarok.

A változódefiníciók. A C nyelvnek előre meg kell adni, hogy milyen változókat kívánunk használni. Egy adott változó lehet lokális (helyi, csak abban a függvényben érvényes, ahol definiáltuk), vagy globális (mindenhonnan elérhető). 

A globális változókat függvényen kívül, a lokálisakat a függvényben definiáljuk. A lokális változókat nem kötelező az első sorban megadni, a függvényen belül bárhol definiálhatjuk ({ jel után), persze hivatkozni csak a definiálás után lehet rájuk

Esetünkben 4 lokális int típusú változót definiálunk. Ha a változók azonos típusúak, vesszővel elválasztva is felsorolhatjuk, de jogunk van akár mindegyiket külön sorba írni ...

Az értékadások. Nem hinném, hogy magyarázatra szorul, elég nyilvánvaló. Csak annyit, hogy már a deklaráció helyén megtehettük volna. pl.: int a=1,b=2,c=3;

Műveletek. Ez sem kifejezetten bonyolult. A bal oldali változóba teszi a jobb oldali kifejezés értékét.

A kiírás.Hogy mi az a %d ? Ő jelzi a printf-nek, hogy a szöveg utáni paraméter egy előjel nélküli egész szám, amit decimálisan kívánunk kiíratni. Ezt a számot természetesen a %d helyére fogja beírni. Több számot is ki tudunk ily módon íratni, csak megfelelő sorrendben fel kell sorolni őket a szöveg után. Ennek analógiájára a többi féle kiíratás:

c karakteres kifejezés, helyén egy ASCII karakter jelenik meg

d előjeles egész decimálisan konvertálva

u előjel nélküli egész decimálisan konvertálva

o előjel nélküli egész oktálisan konvertálva

x előjel nélküli egész hexadecimálisan konvertálva

f lebegőpontos szám tizedespontos alakban

e lebegőpontos szám exponenciális alakban

s string nyomtatása - ez még hosszú mese lesz (majd egyszer) -

Eljött az alkalom, hogy megírjuk az első hasznos programunkat - a szemvizsgálást nem számítva -, hiszen ugyanazt a számot ki tudjuk írni 3, azaz három különböző számrendszerben! - Fantasztikus ! -

#include <stdio.h>
#include <conio.h>
void main(void)
{
int szam=123;
clrscr();
printf("A szám decimálisan : %d\nA szám oktálisan : %o\nA szám" 
"hexadecimálisan : %x\n", szam, szam, szam);
getch();
}

Szóval, ha valaki nyolcas, vagy tizenhatos számrendszerben szeretne látni egy számot, csak beírja az egyenlőségjel után, és adajj. Előjeles számot kéretik NEM beírni.

Ami új:

Remélem van aki magától kitalálta, hogy a clrscr, nem más mint clearscreen, azaz képernyőtörlés. Ez a függvény viszont a conio.h file-ban van eltárolva, ezért hát be kellett őt Include-olni. A getch függvény pedig nem más mint billentyűvárás (szintén a conio.h file-ban).

Mint már említettem, a retrun-t elhagyhatjuk, ha a függvény nem szolgáltat visszatérési értéket, ezt a függvénynév előtti void jelzi.

Szerintem ennyi magyarázkodás már éppen elég volt.

Végezetül, hogy a cikk végének közeledte által kiváltott hatalmas bánatotokat enyhítsem, idetoldok egy programocskát, ami cirka 1.5 perccel megnyújtja a cikket:

#include <stdio.h>
#include <conio.h>
void main(void)
{
clrscr();
printf("\n\n\n\n");
printf("\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2"
"\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\n");
printf("\x1\x2 Képzelj ide valami jó poént !!!! \x1\x2\n");
printf("\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2"
"\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\x2\x1\n");
getch();
}

Felhívom a figyelmet, hogy a képernyőn nem x1x2x1x2 sorok fognak megjelenni, hanem az 1-es és 2-es ASCII karakterek. Na, ez a rovat ilyen rövidre sikerült, ennyi.