Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.61
bizer
0 / 0 / 0
Регистрация: 01.07.2009
Сообщений: 6
#1

Замена goto на адекватный оператор - C++

27.10.2010, 21:39. Просмотров 5454. Ответов 34
Метки нет (Все метки)

Есть приблизительно такой код (условие всередине нескольких циклов, приводить которые не имеет смысла):

C++
1
2
3
4
5
6
7
8
9
10
metka1: if (Y[f][j]==i+1)  
            {
                ...
            }
            else 
            {
                ...
                f=Y[f][j];
                goto metka1;
            }

При таком раскладе уходит в рекурсию.

Можно как-то переписать код без использования оператора goto?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.10.2010, 23:40     Замена goto на адекватный оператор #16
KuKu, спорить бесмысленно, just use it, на своем опыте поймете, то что в программировании поняли лет тридцать назад
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
27.10.2010, 23:46     Замена goto на адекватный оператор #17
easybudda, ну вы уже в крайность вобще for, while не использовать. Ведь иногда же гораздо проще сделать, к примеру, если входящие данные не такие -> goto EXIT без всяких проверок и тому подобное.

Добавлено через 25 секунд
alex_x_x, ну надо же когда то дорасти до программистов 30ти летней давности ...

Добавлено через 1 минуту
Но я подумал над этим
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.10.2010, 23:47     Замена goto на адекватный оператор #18
KuKu, А return 1? А throw? А exit() в конце концов? оО
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
27.10.2010, 23:59     Замена goto на адекватный оператор #19
Lavroff,
- что то вводим если не то goto EXIT
- что то делаем если не то goto EXIT
- что то выводим
- return(0)
- :EXIT
- что то делаем
- return(0)

есть подозрение, что если код не мал, то такая схема будет не хуже чем через throw, return и exit и не менее(если не более) наглядна. Тут все решают какие то частности в решение конкретной задаче.
P.S. я же обещал, думаю все таки над тем, что готу плох
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.10.2010, 00:01     Замена goto на адекватный оператор #20
KuKu, Что-то вводим если не то
return;
Что-то вводим если не то
exit;
Что-то вводим если не то
throw;
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
28.10.2010, 00:05     Замена goto на адекватный оператор #21
Цитата Сообщение от Lavroff Посмотреть сообщение
KuKu, Что-то вводим если не то
return;
Что-то вводим если не то
exit;
Что-то вводим если не то
throw;
Ну дак вы показываете замены, а не говорите чем они лучше. Вашу цитату можно привести в доказательство того что, что 3 действия дублируют готу и зачем они тогда - это утрировано конечно, но суть думаю вы поняли ...
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.10.2010, 00:08     Замена goto на адекватный оператор #22
вы либо троллите, либо это печально
ваша подача спора примитивна
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
28.10.2010, 00:12     Замена goto на адекватный оператор #23
Цитата Сообщение от alex_x_x Посмотреть сообщение
вы либо троллите, либо это печально
ваша подача спора примитивна
Вы либо не знаете, что ответить, либо что то еще (не придумал пока ничего пафосного). Просто все аргументы были можно "заменить на другое". У easybudda был аргумент пока самый весомый, но никто и не призывает переходить на готу. Но все с фанатизмом говорят, что готу плохо, но чем конкретно не очень понятно.
MikeSoft
Эксперт С++
3792 / 1774 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
28.10.2010, 00:14     Замена goto на адекватный оператор #24
KuKu, никто не говорил, что goto - запретный плод.
Если у вас одна метка и вы чётко понимаете при каком условии будет выполнена переадресация - используйте, ради Бога.

Однако, если у вас большой проект, с кучей меток - вам очень сложно будет уловить суть.
Код будет разбросан.
Будете смотреть что у вас выполняется в 1791-ой строке, всё вроде будет ясно, потом в 1792-ой будет метка на 180-ую строку, а из неё можно прыгнуть и в 51-ую ... и всё это делается ради того, чтобы опять вернуться к 1793-ей строке и посмотреть, а что же будет, если не переходить по метке...
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.10.2010, 00:14     Замена goto на адекватный оператор #25
KuKu, можно сказать vector и string уг, больше их не используем
да, все подумали - может иногда их и не стоит использовать, но это уж вы приводите аргументы почему и когда надо goto использовать, а не "а так? а так, а почему так"
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.10.2010, 00:16     Замена goto на адекватный оператор #26
KuKu, Что ж... В goto нет смысла по причине того, что есть высокоуровневые вещи выполняющие не совсем ту же работу, но все же.
А именно.
Циклы,
exit,
return,
throw.

Вы же не используете асемблерные вставки для всего подряд? Так зачем использовать низкоуровневые конструкции типа goto?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.10.2010, 00:17     Замена goto на адекватный оператор #27
а goto и есть практически асмовская команда - jmp
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
28.10.2010, 00:25     Замена goto на адекватный оператор #28
ладно, всем спасибо )
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
28.10.2010, 14:30     Замена goto на адекватный оператор #29
Цитата Сообщение от easybudda Посмотреть сообщение
Попробуйте сами написать програмку хотя бы в пару сотен строк принципиально обходя использование операторов for и while и заменяя их на goto
Ты об этом:
Странное решение и продолжение Странное решение ?

Хотя в
таких случаях
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
 
int main()
{
        int n, i, j, *mas;
        goto a;
f:
        std::cin.get();
        goto z;
b:
        mas = new int[n];
        goto x;
q:
        mas[j] ^= mas[j + 1];   
        goto s;
k:
        for(j = 0; j < n - 1; ++j)
        {
                goto d;
s:;
        }
        goto p;
d:
        if(mas[j] > mas[j + 1])
                goto w; 
        else
                goto s;
z:
        return 0;
h:
        std::cout<<mas[i]<<' ';
        goto t;
a:
        std::cin>>n;
        goto b;
r:
        mas[j + 1] ^= mas[j];
        goto q;
c:
        std::cin.get();
        goto f;
m:
        std::cin>>mas[i];
        goto y; 
l:
        for(i = 0; i < n - 1; ++i)
        {
                goto k;
p:;
        }
        goto g;
w:
        mas[j] ^= mas[j + 1];
        goto r;
g:
        for(i = 0; i < n; ++i)
        {
                goto h;
t:;
        }
        goto c;
x:
        for(i = 0; i < n; ++i)
        {
                goto m;
y:;
        }
        goto l;
}
goto использовать крайне не желательно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2010, 15:15     Замена goto на адекватный оператор
Еще ссылки по теме:
Повторно запустить оператор switch без goto, циклов и доп. функций C++
C++ При вводе пользователем числа от 0 до 9, вывести на экран название программы (использовать оператор goto)
C++ Вычислить таблицу значений функции, используя switch в паре с break, оператор перехода goto
C++ Как преобразовать картинку чтобы получить адекватный вектор входных данных для нейронной сети?
Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
28.10.2010, 15:15     Замена goto на адекватный оператор #30
M128K145, а можно узнать автора этого великолепия ? такое подписывать надо ...
Yandex
Объявления
28.10.2010, 15:15     Замена goto на адекватный оператор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru