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

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

Войти
Регистрация
Восстановить пароль
 
b_d
4 / 2 / 0
Регистрация: 27.01.2014
Сообщений: 114
#1

Объясните мне, что же такого плохого в goto? - C++

05.03.2014, 19:13. Просмотров 474. Ответов 7
Метки нет (Все метки)

Виталян, открой спойлер!

код
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <ostream>
 
using namespace std;
 
int matrix[9999][9999], i, j, a, b, dlin, vis, xod, vibor, n, n2,n3,tm;
 
int main()
 
{
    setlocale(0, "");
 
   l3:
    cout << "1 - двигать кубики;" << endl << "2 - редактор;" << endl << "3 - тест;" << endl;
    cin >> vibor;
 
    if (vibor == 3)
    {
        tm = 1;
        dlin = 5;
        vis = 5;
        a = 2;
        b = 2;
        n2 = 1;
        goto L4;
    }
 
    if ((vibor != 1) & (vibor != 2) & (vibor != 3)){
        cout << "!!! ТАКОГО ПУНКТА НЕТ !!!" << endl << endl;
        goto l3;
    }
 
    if (vibor == 1)
    {
        cout << "пока не готово;" << endl << endl;
        goto l3;
    }
 
    for (int q = 0; q<150; q++) cout << endl;
 
    if (vibor == 2)
    {
        cout << "установите размер поля на своё усмотрение," << endl << "однако длина не должна превышать 79" << endl << "(по краёней мере для windows 7)" << endl<< endl << "(если вы псих или просто супермэн, то вот вам на заметку:" << endl << "максимальный размер поля 9999x9999)"<< endl<< endl;
    l1:
        cout << "длина поля = ";
        cin >> dlin;
 
        if (dlin<1)
        {
            cout << endl << "!!! ДЛИНА НЕ МОЖЕТ БЫТЬ МЕНЬШЕ ЕДИНИЦЫ !!!" << endl << endl;
            goto l1;
        }
 
    l2:
        cout << "высота поля = ";
        cin >> vis;
 
        if (vis<1)
        {
            cout << endl << "!!! ВЫСОТА НЕ МОЖЕТ БЫТЬ МЕНЬШЕ ЕДИНИЦЫ !!!" << endl << endl;
            goto l2;
        }
 
        for (int q = 0; q<150; q++) cout << endl;
 
    L5:
        cout << "0 - пустое место;" << endl << "1 - чубрик;" << endl << endl;
                                                               
    L4:
 
        for (i = 0; i<vis; i++)
        {
            for (j = 0; j<dlin; j++)
            {                                                  
                if ((a == j)&(b == i)) matrix[j][i] = 1;
                else matrix[j][i] = 0;
                                                               
                if (matrix[j][i] == 0) cout << "0";
                if (matrix[j][i] == 1) cout << "1";
                if (j == dlin - 1) cout << endl;
            }
        }
 
            
 
            cout << endl << endl << a+1 << " " << b+1 << endl << endl;
        
        if (n2 == 0 & tm == 0)
        {
            cout << endl << "куда поставить чубрика?" << endl << "номер строки = ";
            cin >> a;
            if ((a<1) || (a>vis))
            {
                for (int q = 0; q < 150; q++) cout << endl;
                cout << "!!! ЭТО ВНЕ ПОЛЯ !!!" << endl << endl;
                goto L5;
            }
            a = a - 1;
 
            cout << "номер столбца = ";
            cin >> b;
            if ((b<1) || (b>dlin))
            {
                for (int q = 0; q < 150; q++) cout << endl;
                cout << "!!! ЭТО ВНЕ ПОЛЯ !!!" << endl << endl;
                goto L5;
            }
            b = b - 1;
            
            for (int q = 0; q < 150; q++) cout << endl;
            n2 = 1;
            goto L4;
        }
 
        if (tm == 0) cout << endl << "4 - влево;" << endl << "6 - вправо;" << endl << "2 - вниз;" << endl << "8 - вверх;" << endl << endl;
        cin >> xod;
        cout << endl;
        if (xod == 4) if (a >= 1) a = a - 1;
        if (xod == 6) if (a<dlin - 1) a = a + 1;
        if (xod == 2) if (b<vis - 1)b = b + 1;
        if (xod == 8) if (b >= 1) b = b - 1;
        goto L4;
 
        cout << endl << endl;
    }
 
    if (vibor = 1)
    {
 
    }
 
    return 0;
}


"запретный плод сладок". чуваки, может объясните мне, что же такого плохого в goto?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
05.03.2014, 19:18
  #2

Не по теме:

Цитата Сообщение от b_d Посмотреть сообщение
Виталян, открой спойлер!
это к кому обращение?
Цитата Сообщение от b_d Посмотреть сообщение
чуваки,
на кортах семки плюють.

b_d
05.03.2014, 19:24  [ТС]
  #3

Не по теме:

другу моему код хочу показать

Megabar
05.03.2014, 19:34
  #4

Не по теме:

Извините, но название темы и содержание чем-то смахивает на страницу в ВК/FB

gunslinger
случайный прохожий
1132 / 750 / 191
Регистрация: 20.07.2013
Сообщений: 2,067
05.03.2014, 20:00     Объясните мне, что же такого плохого в goto? #5
Ничего плохого в goto нет, если использовать его с умом.
Но говорят, что в "хорошем обществе" делать это не рекомендуется, иначе могут потом косо смотреть.
b_d
4 / 2 / 0
Регистрация: 27.01.2014
Сообщений: 114
05.03.2014, 20:12  [ТС]     Объясните мне, что же такого плохого в goto? #6
понятненько
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.03.2014, 23:30     Объясните мне, что же такого плохого в goto? #7
понимание читаемого кода с goto сильно усложняется, если этим пользоваться как попало.
вот в вашей многокилометровой функции все прыгает туда сюда и чтобы понять
все ветвления программы нужно сидеть и долго втыкать в код. и то наверно не поможет.
нужно на бумажке рисовать когда делается при каких условиях.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 23:47     Объясните мне, что же такого плохого в goto?
Еще ссылки по теме:
Объясните мне неактуальность MFC весомыми аргументами C++
C++ Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
C++ Что мне делать или что надо знать перед тем как начать изучение яз.программирования С/С++?
C++ Дан текст. Найти слово встречающееся в каждом предложении или сообщить что такого слова нет
Работа с файлами. Найти слово, встречающееся в каждом предложении, или сообщить, что такого слова нет C++

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 23:47     Объясните мне, что же такого плохого в goto? #8
Присоединюсь к ответам, действительно отследить ошибку в коде неимоверно в этом случае (опыт был)... На моей памяти я его всего то в 2-3 местах использовал, и то из-за того что перед глазами был уже отлаженный рабочий код функции на фортране, а адаптировать ни времени да и ни желания не было (поэтому чуть ли ни дословно и перевел на C++), а один лишь раз сам его ввел: в случае некорректной отработки промежуточных вызовов (сообщение об ошибки) пропустить дальнейший код и перейти сразу к концу функции (очистке выделенной памяти) миную промежуточный код. И то потому что на тот момент ничего лучше придумать не смог... Сейчас бы скорее всего сделал бы по другому, но в принципе алгоритм бы тот же остался бы, поэтому и не трогаю...
Yandex
Объявления
05.03.2014, 23:47     Объясните мне, что же такого плохого в goto?
Ответ Создать тему
Опции темы

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