| free hosting image hosting hosting reseller online album e-shop famous people | ||
![]() ![]() |
||
|
|
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. |