Скокови на произвољно одредиште¶
Наредбом goto
омогућава се скок на произвољно одредиште у програму. Има следећи
општи облик…
goto identifikator;
…где је identifikator
обележје одредишта, тзв. лабела, на које се изводи скок.
Одредиште се може дефинисати испред сваке наредбе у програму:
identifikator: naredba;
Произвољно одредиште на које се скаче наредбом goto
мора се налазити у
оквиру исте функције, нпр. у оквиру функције main()
. Није могуће скакање из
једне функције на произвољно одредиште у другој функцији.
Идентификатори који се користе за обележја одредишта чувају се у посебном простору идентификатора, тако да се не могу мешати са осталим идентификаторима у програму. То значи да програм може да садржи два идентификатора која су именована истим именом, нпр. један за обележје одредишта, а други за променљиву.
Напиши програм у програмском језику C који ће рачунати збир унетих позитвних целих бројева са стандардног улаза све док корисник не унесе број мањи од један.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int broj, zbir = 0;
for (;;)
{
scanf("%d", &broj);
if (broj > 1)
zbir += broj;
else
goto kraj;
}
kraj: printf("%d", zbir);
return 0;
}
У решењу задатка написана је бројачка петља у којој се рачуна збир унетих целих
позитивних бројева. Ако се унесе број мањи од један, из петље се скаче на
обележје одредишта kraj
. Уместо термина „скаче на”, чешће се каже се да се
„преноси контрола на”.
Треба напоменути да теорема структурираног програмирања из 1966. године
дефинише да све управљачке структуре треба да имају један улаз и један излаз и
да превремени изласци из петље, делимична извршавања тела петље и скакања на
произвољна одредишта нису дозвољени. То значи да је коришћење наредби break
,
continue
и goto
противно оригиналној парадигми структурираног програмирања.
Међутим, како програмски језик C и његови деривати који су данас у широкој
употреби тада нису ни постојали, коришћење наредби break
, continue
и goto
биле су теме многобројних дебата у научним круговима. Иако се сматра да ове
наредбе нарушавају структурност програма и да увек постоји другачије решење,
можете их користити уколико ће вам то олакшати решавање неког задатка, али увек
са опрезом!