Оператор перехода goto. Когда код становится непонятен даже создателю. Урок #22.

preview_player
Показать описание
Урок #22. Оператор перехода goto. Когда код становится непонятен даже создателю.
Уроки по программированию
Рекомендации по теме
Комментарии
Автор

Когда друг вырвал страницу про гото, он буквально показал смысл этого оператора😂

КамиллаТашмухамбетова
Автор

Мой препод про goto говорил следующее :"когда нельзя, но очень хочется - то можно"

Ponial
Автор

стоит подзадуматься, а почему именно была вырвана станица с этим оператором. . .
Может это знак?

melantpoint
Автор

Спасибо, Сергей! Я думаю вам стоит указывать кошельки в описании, ибо такой труд должен оплачиваться! Вам бы в какой-нибудь хороший вуз устроиться учителем. Хороших учителей по программированию почти нет. Огромное спасибо за ваши уроки!

deniskhan
Автор

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

nemoA
Автор

На заре моей юности программирования на ЭВМ ЭС язык программирования PL1 вообще не знал что такое цикл, т.е. были операторы if else и goto, ну и конечно метки куда приходить. Вот на этом мы писали большие программы, например расчёта зарплаты, бухгалтерского учёта и т.д. Бывало так, что каждый третий оператор имел метку.

Николай-чш
Автор

Году в 2000, во время изучения вижуал бейсик, преподаватель очень доходчиво, с примерами, объяснял нам к чему часто приводит использование goto.
Запомнил на всю жизнь :)

АлександрКопытенко
Автор

Если уж использовать, то после goto и линка надо оставить ЖИРНЫЙ комментарий, чтоб прям в глаза бросался :D

HeavenofTERA
Автор

Я думаю если нужно выйти из вложенного цикла когда мы что то нашли нужное. Мы же не можем 2 раза break написать чтобы из 2 циклов выйти. И тут очень полезно будет использовать goto. (Ну можно например bool isFound и в главном цикле делать проверку на то чтобы isFound был false. А если будет true то выйти из главного цикла. Но это же намного медленней каждый раз проверять.

pandalove
Автор

не зря страница вырвана ) если так напишут, попробуй потому найди куда перескачила программа. Хотя я думаю при написании goto обязательно надо комментить куда дальше смотреть и где продолжение. Иначе полная жопа...

МихаилИванов-щу
Автор

Для меня, это функция очень даже удобная. Например, когда вы ввели номер действия, которого нет в списке, вам не придется заново запускать программу, вас просто перенесет к выбору номера действия. Возможно я чего-то не понимаю...


#include <iostream>
using namespace std;

int main() {
setlocale(LC_ALL, "rus");


link:
//(куда должен вернуться)


int a;

cout << "Введите направление вашей линии: " << endl;
cout << "\n1. Горизонтальное " << "\n2. Вертикальное " << endl;
cin >> a;

if (a == 1) {
cout << "Вы выбрали горизонтальное направление " << endl;
}
else if (a == 2) {
cout << "Вы выбрали вертикальное направление " << endl;
}
else {
cout << "Такого номера нет в списке. \nВведите номер вашего действия заново" << endl;
goto link;
//(откуда должен вернуться)
}


system("pause");
}

kotringo
Автор

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

isorport
Автор

Классные уроки! Молодец!
На ассемблере никак без переходов )

spolyr
Автор

* Самые понятные, видео уроки по c++, на всём (RU) youtube *

ДмитрийОсипов-хф
Автор

ЭТО ТО, ЧТО МНЕ БЫЛО НУЖНО.
Вот серьёзно, для меня это очень полезная функция .Я делал калькулятор для д/з #3, но хотел его зациклить, чтобы он после выдачи ошибки выводил меню заново. Конечно, это можно сделать и с циклом, но мне этот способ не нравится, из-за того, что программа будет большой. Кому интересно, то вот код:

#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "RU");
const char N = '\n';
int selection;
float a, b;


cout << "Введите 2 числа" << N;
cin >> a >> b;

link: //Вот тут//

cout << " Меню" << N
<< "1.Сложение" << N
<< "2.Разность" << N
<< "3.Умножение" << N
<< "4.Деление" << N;
cin >> selection;

switch (selection)
{
case 1:
{
cout << a + b << N;
break;
}
case 2:
{
cout << a - b << N;
break;
}
case 3:
{
cout << a * b << N;
break;
}
case 4:
{
cout << (float)a / b << N;
break;
}
default:
cout << "Ошибка, попробуйте ещё раз." << N;
goto link; //Отсылает при ошибке к меню, 14 строчка//

}

}

IMPALYCH
Автор

Удобная штука для переключения или перезапуска программы с обновленными данными, главное не заниматься этим слишком часто, как говорится.

cnhfgjy
Автор

Привет из 2023. Спасибо большое! i++;

ИоаннДейкун
Автор

Для того кто учил ассемблер, goto в полне обычное дело =)

aspiral
Автор

Соглашусь, что для удобства понимания кода лучше обойтись без "goto", но если оно в рамках какого-то условия, то перейти к другой части программы через "goto" вполне приемлемо, нужно лишь линки называть понятными именами. Например, где может использоваться: возврат к вводу данных, пока условие не будет выполнено, вместо завершения программы. Или если программа имеет ветвление с большим кодом т.е. в конструкцию IF..ELSE вписывать код большого размера становится просто неприлично и это приведет к путанице или еще хуже к ошибкам.

xx-hqrb
Автор

я его обычно использую в случае, если нужно повторить или закончить действие в зависимости от выбора пользователя, возможно это можно как то заменить циклами, но пока у меня небольшие коды так удобнее

aigula