Инструкция goto — это С++-инструкция безусловного перехода.
Долгие годы эта инструкция находилась в немилости у программистов, поскольку способствовала, с их точки зрения, созданию "спагетти-кода". Однако инструкция goto по-прежнему используется, и иногда даже очень эффективно. В этой книге не делается попытка "реабилитации" законных прав этой инструкции в качестве одной из форм управления программой. Более того, необходимо отметить, что в любой ситуации (в области программирования) можно обойтись без инструкции goto, поскольку она не является элементом, обеспечивающим полноту описания языка программирования. Вместе с тем, в определенных ситуациях ее использование может быть очень полезным В этой книге было решено ограничить использование инструкции goto рамками этого раздела, так как, по мнению большинства программистов, она вносит в программу лишь беспорядок и делает ее практически нечитабельной. Но, поскольку использование инструкции goto в некоторых случаях может сделать намерение программиста яснее, ей стоит уделить некоторое внимание.
Инструкция goto требует наличия в программе метки. Метка — это действительный в C++ идентификатор, за которым поставлено двоеточие. При выполнении инструкции goto управление программой передается инструкции, указанной с помощью метки. Метка должна находиться в одной функции с инструкцией goto, которая ссылается на эту метку.
Метка — это идентификатор, за которым стоит двоеточие.
Например, с помощью инструкции goto и метки можно организовать следующий цикл на 100 итераций.
х = 1;
loop1:
х++;
if(х < 100) goto loop1;
Иногда инструкцию goto стоит использовать для выхода из глубоко вложенных инструкций цикла. Рассмотрим следующий фрагмент кода.
for(...) {
for(...) {
while(...) {
if(...) goto stop;
}
}
}
stop:
cout << "Ошибка в программе.\n";
Чтобы заменить инструкцию goto, пришлось бы выполнить ряд дополнительных проверок. В данном случае инструкция goto существенно упрощает программный код. Простым применением инструкции break здесь не обошлось, поскольку она обеспечила бы выход лишь из самого внутреннего цикла.
Важно! Инструкцию goto следует применять с оглядкой (как сильнодействующее лекарство). Если без нее ваш код будет менее читабельным или для вас важна скорость выполнения программы, то в таких случаях использование инструкции goto показано.
Следующий пример представляет собой последнюю версию программы "Угадай магическое число". В ней использованы многие средства С++-программирования, представленные в этой главе, и, прежде чем переходить к следующей, убедитесь в том, что хорошо понимаете все рассмотренные здесь элементы языка C++. Этот вариант программы позволяет сгенерировать новое число, сыграть в игру и выйти из программы.
// Программа "Угадай магическое число": последняя версия.
#include <iostream>
#include <cstdlib>
using namespace std;
void play(int m);
int main()
{
int option;
int magic;
magic = rand();
do {
cout << "1. Получить новое магическое число\n";
cout << "2. Сыграть\n";
cout << "3. Выйти из программы\n";
do {
cout << "Введите свой вариант: ";
cin >> option;
}while(option<1 || option>3);
switch(option){
case 1:
magic = rand();