![float:right;width:350px|](52225.png)
Оператор ``goto`` выполняет переход на другой оператор той же функции, помеченный указанной меткой.\
`tt"goto" quad "метка" tt";"`
Метка указывается перед оператором как\
`"метка" \tt":" quad "оператор" tt";"`
Оператор ``goto`` позволяет задать любой порядок выполнения операторов. Программа при этом становится похожей на "спагетти", поэтому рекомендуется избегать слишком частого использования ``goto``.
```run-c
#include <stdio.h>
int main()
// Проверка, что N - простое число
{ int n;
scanf("%d",&n);
for(int i=2; i*i<=n; ++i)
if(n%i==0) goto composite;
printf("Число простое\n");
goto end;
composite:
printf("Число составное\n");
end: ;
}
<<
101
```
Во многих случаях вместо ``goto`` можно использовать обычные операторы ветвления и циклов со специальные операторами перехода.
Оператор ``break`` завершает выполнение цикла, то есть эквивалентен ``goto`` на следующий оператор после цикла.
Оператор ``continue`` переходит к следующей итерации цикла, то есть эквивалентен ``goto`` в точку за последним оператором в теле цикла (в ``for`` там находятся действия по изменению переменной цикла). Применение ``continue`` позволяет уменьшить количество ``else``, вложенность ``{}`` и визуальную сложность кода.
При использовании ``break`` может потребоваться различать способы выхода из цикла (по условию или по ``break``). Для этого можно использовать вспомогательную переменную-флаг, принимающую значения 0 или 1. После цикла можно проверять значение этого флага, и использовать обычное ветвление вместо ``goto``.
```run-c
#include <stdio.h>
int main()
// Проверка, что N - простое число
{ int n,
flag=1; // вышли по условию
scanf("%d",&n);
for(int i=2; i*i<=n; ++i)
if(n%i==0) {
flag=0; // вышли по break
break;
}
if(flag)
printf("Число простое\n");
else
printf("Число составное\n");
}
<<
15
```
Так как с помощью ``break`` можно выйти только из одного цикла, для выхода из двух или более циклов (а также выхода из цикла внутри ``switch``) нужно использовать ``goto``.
*Структурное программирование* запрещает использование ``goto``, в нём разрешены только конструкции последовательности, ветвлений и циклов. Оператор ``goto`` отсутствует в Java и JavaScript, происходящих от C, и для выхода из нескольких циклов используется ``break`` с меткой, которая пишется перед соответствующим циклом.
В результате для нахождения точки перехода нужно сначала найти метку перед циклом, а затем конец этого цикла. При использовании ``goto`` нужно просто найти метку.