free hosting   image hosting   hosting reseller   online album   e-shop   famous people 
Free Website Templates
Free Installer

 

Kurs za programirawe vo C

 




 

 

Lekcija 5

 

5-1 “switch…case” struktura

 

Vo prethodnite lekcii vidovme kako mo`eme da koristime “if” izrazi vo programi kade treba da odbereme nekoja od pove}e izrazi.Mo`eme da koristime “if” izrazi,no sepak podobro e da koristime “switch” vo mesta kade imame potreba da napravime izbor.

 

switch(…)

{

case …:komanda;

              komanda;

              break;

 

case …:komanda;

              break;

 

default :

              komada;

}

 

Vo gornava switc komanda mo`eme da izvr{me nekolku razli~ni komandi vo slu~aj kade imame nekolku alternativni izbori.

 

Primer:

 

#include <stdio.h>

#include <stdlib.h>

main()

{

int izbor;

while (1)

  {

printf(“\n\nMeni: \n”);

printf(“1- Matematicki program\n2- Smetkovodstven program\n”);

printf(“3- Program za zabava\n4- Izlez”);

printf(“\n\nVas izbor -> “);

scanf(“%d”,&izbor);

 

switch(izbor)

     {

case 1 : printf(“\nMatematickiot program raboti. !”);

              break;

case 2 : printf(“\nSmetkovodstveniot program raboti. !”);

              break;

case 3 : printf(“\nRaboti programot za zabava. !”);

              break;

case 4 : printf(“\nProramot zavrsi. !”);

              exit(0);

 

default

        printf(“\nIzborot e nevaliden”);

    }

  }

}

 

Vo switch komandata sekoe case se odnesuva kako prost izbor.Izborot odreduva to~ka od kade {to po~nuva izvr{uvaweto na komandata.Switch izrazot }e odbere edna od case strukturite.

Otkako }e vleze vo case strukturata egzekucijata prodol`uva se dodeka ne naide na break izraz.Break izrazite imaat vitalno zna~ewe vo swtich strukturite.Ako gi trgnete break izrazite case naredbata }e prodol`i da se izvr{uva i sekoja naredna case komanda }e se izvr{i.

 

Ova e zatoa {to sekoja case sekcija se odnesuva kako izbor,posle koj celiot program prodol`uva da se izvr{uva do krajot na switch blokot.Edinstven na~in da se zavr{i switch blokot e so break izraz.

Vo edna od case strukturite ne koristevme break.Tuka koristevme terminator exit(0) ,pa break izrazot nema da ima smisla.

 

Default sekcijata }e izvr{i ako ne se izbere nitu eden case slu~aj.Parametarot vo switch izrazot mora da bide od celobroen tip ili karakter.

 

Koristewe na promenlivi vo case sekcijata ne e dozvoleno.Ova zna~i deka ne e dozvoleno da koristite vakov izraz:

 

case i :ne{to;

              break;

 

5-2  “break” izraz

 

Prethodno koristevme break izrazi vo switch…case struktura.No mo`eme isto taka da koristime break i vo ciklusi za da terminirame ciklus.

 

Primer:

 

while (broj<20)

{

printf(“Vnesi ocenka : “);

scanf(“%d”,&ocenka[broj]);

if (ocenka[broj]<0)

break;

}

 

Vo gorniov primer ciklusot se izvr{uva ili dodeka ne bide num>= 20 ili koga }e se vnese negativna ocenka.

 

Primer:

 

#include <stdio.h>

#include <stdlib.h>

main()

{

int izbor;

while (1)

  {

printf(“\n\nMeni: \n”);

printf(“1- Matematicki program\n2- Smetkovodstven program\n”);

printf(“3- Program za zabava\n4- Izlez”);

printf(“\n\nVas izbor -> “);

scanf(“%d”,&izbor);

 

switch(izbor)

     {

case 1 : printf(“\nMatematickiot program raboti. !”);

              break;

case 2 : printf(“\nSmetkovodstveniot program raboti. !”);

              break;

case 3 : printf(“\nRaboti programot za zabava. !”);

              break;

case 4 : printf(“\nProramot zavrsi. !”);

               break;

 

default:

     printf(“\nIzborot e nevaliden”);

    }

 

if (izbor==4) break;

  }

}

 

Vo ovoj primer koristevme break izraz namesto exit(0) koristeno vo prviot primer.

Kako rezultat na ovaa promena,morame da koristime vtor break izraz vo while ciklusot i nadvor od switch blokot.

 

Ako izborot e 4 toga{ vtorata break komanda }e go terminira while ciklusot i }e go dostigne krajot na main() funkcijata i koga nema ve}e izrazi vo main() funkcijata programot avtomatski }e zavr{i.

 

5-3 getchar()

 

getchar() funkcijata e alternativen izbor koga sakame da ~itame karakteri od vnesot.Ovaa funkcija gi zema karakterite od vnesot i gi vra}a kako promenliva ili izraz vo programot.

 

ch=getchar();

 

Postoi funkcija za pra}awe karakteri i za izlez:

 

putchar(ch);

 

Primer:

 

#include <stdio.h>

#include <conio.h>

main()

{

char ch;

while (ch!=’.’)

 {

 ch=getchar();

 putchar(ch);

 }

}

 

Prvo poglednete go izlezniot rezultat i pogodete ja pri~inata za vakviot rezultat.

 

Izlez:

 

test                   <--Ova e napisano od nas

test                   <--izlezot od putchar otkako stisnavme enter

again.testing     <--vneseniot string vklucuva ‘.’ Karakter

again.                <--ciklusot zavrsuva koga doaga do ‘.’ Karakter

 

Gorniot program ~ita karakteri {to gi vnesuvame od tastatura se dodeka ne najde ‘.’  kako vlezen karakter.

 

Sekoj karakter vnesen }e bide prika`an i na konzolata i prika~en na bafer.Ovoj bafer }e bide ispora~an kako ch promenliva po stiskawe na enter(ne pred toa).

 

Zna~i vnesenite karakteri se baferiraat se dodeka ne pritisneme enter i vo toj moment programot prodol`uva so izrazite koi sledat po getchar() funkcijata.Ova se komandi od ciklusot.

 

Ako ima ‘.’ karakter vo baferiranite karakteri,ciklusot prodol`uva da pra}a karakteri do konzolata se dodeka ne stigne do ‘.’ i potoa go stpoira ciklusot i izleguva od while ciklusot.

 

Ako ne dojde do ‘.’ vo karakterite se vra}a do po~etokot na ciklusot,kade zapo~nuva getchar() funkcijata i povtorno ~eka vnes.

 

Prviot ‘test’ string vo izlezot e rezultat od na{eto stiskawe na tastaturata a vtoriot ‘test’ izlez e rezultat na izrazot posle stiskawe enter.

Vo nekoi operativni sistemi i nekoi C kompajleri postoi i druga vlezna funkcija “getch”.Ovaa ne gi baferira vnesenite karakteri i gi vra}a na izlez samo {to }e gi dobie.

 

Borland C za DOS kako primer,ja poddr`uva ovaa funkcija,definirana vo conio.h datotekata vo Borland C i Turbo C kompajlerite.

 

So ovaa funkcija mo`eme da ja proverime validnosta na sekoe stisnato kop~e pred da prodol`ime so negovo koristewe.Ako ne e validno mo`eme da go isfrlime.

 

Primer:

 

//raboti na borland C

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

main()

{

char izbor;

while (1)

   {

printf(“\n\nMeni :\n”);

printf(“1- Matematicki program\n2- Smetkovodstven program\n”);

printf(“3- Program za zabava\n4- Izlez”);

printf(“\n\nVas izbor -> “);

izbor=getch();

switch (izbor)

      {

case 1 : printf(“\nMatematickiot program raboti. !”);

              break;

case 2 : printf(“\nSmetkovodstveniot program raboti. !”);

              break;

case 3 : printf(“\nRaboti programot za zabava. !”);

              break;

case 4 : printf(“\nProramot zavrsi. !”);

               exit(0);

     }

   }

}

 

Vo gorniov primer go imame prepi{ano primerot so case no so getch() funkcija namesto scanf() funkcijata.

 

Ako go testirate programot baziran na scanf funkcijata }e vidite deka toj nema nikakva kontrola na vneseniot string na odgovor.Ako korisnikot vnese nevaliden izbor ili string programot mo`e da javi gre{ka.

 

Vo getch funkcijata korisnikot mo`e da vnese eden karakter vo edinica vreme.Programot vedna{ go zema karakterot i go testira za da vidi dali pripa|a na eden od izborite.

 

Vo ovoj primer go preskoknavme default izrazot od switch..case strukturata.

Ako korisnikot vnese nevalidno kop~e while ciklusot }e prodol`i bez vleguvawe vo case strukturata.Taka vnesuvaweto na nevalidni kop~iwa }e bide zanemareno i samo validen izbor }e se zeme vo predvid.

 

5-4 “continue” izraz

 

Continue izrazot mo`e da se koristi vo ciklusi.Kako i break komandata continue go menuva tekot na programata.Toj ne go zapira ciklusot.

 

Samo go skoka posledovatelniot ostatok od ciklusot i go vra}a ciklusot na po~etokot.

 

Primer:

 

whilr( (ch=getchar() )!=’\n’)

{

if (ch==’.’)

continue;

putchar(ch);

}

 

Vo gorniov primer,programot prifa}a vnesovi i gi zanemaruva ‘.’ karakterite.Ako go izvr{ite ovoj primer }e vidite deka rezultatite ne se pojavuvaat se dodeka programot ne sopre so rabota odnosno dodeka ne se vnese “\n”.

 

Kako {to ka`avme prethodno ova docnewe e poradi toa {to getchar() funkcijata e baferirana funkcija.