Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

2.1.1Синтаксис оператора goto

Синтаксис оператора goto следующий:

МОЯ_МЕТКА :

<команды>;

...

goto МОЯ_МЕТКА;

Как только программа доходит до оператора goto, она сразу осуществляет переход на команду, отмеченную меткой. Метка может быть расположена как после goto, так и до него. Область видимости метки – тело функции, поэтому использовать goto для перехода из одной функции в другую нельзя. Например, следующий фрагмент кода ошибочен.

void function1() {

LABEL_1 :

cout << "Label 1" << endl;

}

int main() {

goto LABEL_1;

system("pause");

return 0;

}

Ошибка заключается в том, что обращение к метке LABEL_1 находится внутри функции main(), а сама метка расположена внутри функции function1().

Рассмотрим теперь работающий пример.

int main() {

goto LABEL_1;

cout << "Эта команда не выполнится" << endl;

cout << "И эта тоже" << endl;

LABEL_1 :

cout << "А эта команда выполнится" << endl;

system("pause");

return 0;

}

2.1.2Использование оператора goto при реализации меню

Вспомним, что в первой версии нашего консольного меню выбор можно было осуществлять только один раз, после чего программа заканчивала свою работу. Однако завершение работы является более логичным, если оно происходит только по желанию пользователя. Значит, если пользователь выбирает пункт меню отличный от выхода, программа должна выполнить этот пункт и снова предложить сделать выбор. Для этого можно использовать оператор goto.

#include <iostream>

using namespace std;

int main() {

setlocale(LC_ALL, "Russian");

START:

system("cls"); //

cout << "1 - Приветствие" << endl;

cout << "2 - Прощание" << endl;

cout << "0 - Выход" << endl;

cout << "Ваш выбор - ";

int choice;

cin >> choice;

switch (choice) {

case 1 :

cout << "Привет" << endl;

break;

case 2 :

cout << "Пока" << endl;

break;

case 0 :

exit(EXIT_SUCCESS);

}

system("pause");

goto START;

return 0;

}

2.1.3Оператор goto и игра «Угадай число!»

Рассмотрим игру «Угадай число!», где пользователь должен угадать число, которое загадает компьютер; попытки должны продолжаться до тех пор, пока число не будет угадано, а по окончании программа должна сообщить, сколько попыток сделано.

#include <iostream>

using namespace std;

int main() {

setlocale(LC_ALL, "Russian");

int secret_n = rand() % 10;

int your_n;

int trials = 0;

cout << "Угадай число: ";

START:

cin >> your_n;

trials++;

if (secret_n == your_n) {

cout << "Угадали!\n";

cout << "Число попыток=" << trials;

} else {

cout << "Не угадали!\n";

goto START;

}

system("pause");

return 0;

}

2.1.4Реализация цикла на базе if и goto

Одна из фундаментальных и наиболее важных конструкций в программировании – это циклы; они позволяют повторить некоторые действия заданное число раз. Мы детально изучим циклы в соответствующей теме, а сейчас рассмотрим, как реализовать циклическую конструкцию на базе операторов if и goto. После этого вы сможете почувствовать основную идею цикла, а также лучше понять работу оператора goto.

В качестве первой задачи рассмотрим вывод на экран чисел от 1 до 100. Обсудим алгоритм решения данной задачи.

  1. i=1;

  2. Если i<100, то

    1. вывести i;

    2. i=i+1;

    3. идти на шаг 2.

Последний шаг может быть реализован в виде goto.

#include <iostream>

using namespace std;

int main() {

int i=1;

NEXT_STEP :

if (i<=100) {

cout << i << " ";

i++;

goto NEXT_STEP;

}

system("pause");

return 0;

}

Пока переменная i меньше либо равна 100, программа заходит внутрь оператора if, выводит значение переменной i, увеличивает ее значение на 1 и возвращается к проверке условия. Можно вывести определенные значения, например, четные:

#include <iostream>

using namespace std;

int main() {

int i=1;

NEXT_STEP :

if (i<=100) {

if (i%2==0) {

cout << i << " ";

}

i++;

goto NEXT_STEP;

}

system("pause");

return 0;

}

Для вычисления суммы следует объявить дополнительную переменную и вместо вывода значения переменной i на экран прибавлять его к этой новой переменной.

#include <iostream>

using namespace std;

int main() {

int i=1, sum = 0;

NEXT_STEP :

if (i<=100) {

sum += i;

i++;

goto NEXT_STEP;

}

cout << sum << endl;

system("pause");

return 0;

}