Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/75: Рейтинг темы: голосов - 75, средняя оценка - 4.57
72 / 17 / 2
Регистрация: 29.12.2010
Сообщений: 339

выход из swich-а и цикла

01.01.2011, 04:48. Показов 14827. Ответов 32

Студворк — интернет-сервис помощи студентам
Надо выйти из свича, вложенного в цикл так, чтобы выйти из цикла(я видел как это делалось через 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
for (j = 0; j < listBox6.Items.Count;j++)
                    {
                        if (int.Parse(listBox6.Items[j].ToString()) == 1)
                        {
                            switch (int.Parse(listBox5.Items[j].ToString()))
                            {
                                case 4:
                                    if (pictureBox4.Left <= int.Parse(listBox7.Items[i].ToString()) && pictureBox4.Right >= int.Parse(listBox7.Items[i].ToString()) && pictureBox4.Top <= int.Parse(listBox8.Items[i].ToString()) && pictureBox4.Bottom >= int.Parse(listBox8.Items[i].ToString()))
                                    {
 
                                     
                                            listBox1.Items.RemoveAt(j);
                                            listBox2.Items.RemoveAt(j);
                                            listBox3.Items.RemoveAt(j);
                                            listBox4.Items.RemoveAt(j);
                                            listBox5.Items.RemoveAt(j);
                                            listBox6.Items.RemoveAt(j);
                                            j--;
                                            listBox7.Items.RemoveAt(i);
                                            listBox8.Items.RemoveAt(i);
                                            i--;
                                            pictureBox4.Visible = false;
                                       //Выйти надо отсюда!!!!!!!!!!!!!!!!!!!!!!
                                    }
                                    break;
                            }
                        }
                        else
                            break;
 
                    }
//Выйти надо сюда!!!!!!!!!!!
Большая часть свича удалена, но, скорее всего, каждый 2-й будет делать по этому поводу замечания)))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2011, 04:48
Ответы с готовыми решениями:

Выход из цикла
Доброго времени суток. Подскажите, пожалуйста как сделать выход из цикла при нажатии 0 в меню. Пытался так на ESC, но не выходит. ...

Выход из цикла с if
Выход из цикла с помощью if. uses Crt; LABEL m1, m2, m3: integer; var f: integer; begin ClrScr; writeln(' Начало счёта: '); ...

Выход из цикла
Всем привет! возникла проблема с циклом, не могу понять почему не работает код, а именно мне необходимо по нажатию кнопки прекращать...

32
Заблокирован
03.01.2011, 05:16
Студворк — интернет-сервис помощи студентам
Вот тебе код на C (без плюсов). Покажи, как сделать красиво без 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
int myFunc()
{
   int result = -1;
 
   void *p1 = NULL;
   void *p2 = NULL;
   void *p3 = NULL;
   /* .... */
  
   p1 = malloc(10);
   if (!p1) goto ERROR;
 
   p2 = malloc(20);
   if (!p2) goto ERROR;
 
   p3 = malloc(30);
   if (!p3) goto ERROR;
   
   /* .... */
 
   if (/* some error */) goto ERROR;
 
   /* .... */
 
   if (/* some error */) goto ERROR;
 
   /* .... */
 
   result = OK;
ERROR:
   if (p1) free(p1);
   if (p2) free(p2);
   if (p3) free(p2);
   /* .... */
 
  return result;
}
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
03.01.2011, 11:35
Ты бы еще на ассемблере предложил
С - язык можно сказать низкого уровня, прямой доступ к память, нет классов, соответственно деструкторов то же нет (это про выделение/уничтожение памяти)
На мой взгляд в твоем коде для данного языка все довольно красиво
Единственный вариант у тебя после проверки, если память не выделилась, освобождать ранее выделенную память и возвращать код ошибки. Но тогда придется вызовы функции освобождения памяти дублировать в самом конце функции. Это типа не красиво, исполняемый файл увеличивается.
Разговор шел о языках более высокого уровня.
Бьер Страуструпт - создатель C++, оставил goto в С++, отметил что этот оператор чаще используется при генерации кода, чем человеком
Никлаус Вирт - создатель pascal, модула - в паскале оператор есть, в модула-2 уже нет
Я не релегиозный фанатик "не-использования-goto", имхо - если без этого оператора можно обойтись, я обхожусь. Не потому, что так какие-то дяди советуют, для меня код без goto более понятен.
Короче весь смысл написанного мной сводился к тому, что бы не злоупотреблять этим
1
Заблокирован
03.01.2011, 18:02
Цитата Сообщение от s-kvv Посмотреть сообщение
Ты бы еще на ассемблере предложил
Ты какой-то непоследовательный. Ты в предыдущем посте в качестве аргумента привёл статью 1968 года... а теперь возникаешь, что я на C программу предложил.
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
04.01.2011, 06:04
А еще выше я говорил о низкоуровневом программировании
Если бы не было этой статьи (1968, она вроде первой была) то может не было бы и нашего "спора".
Видимо в то время программисты повально использовали этот оператор где надо и ненадо. А щас начали фильтровать свой код. Хотя как-то видел пример программы на C# где почти все на goto. Вроде калькулятор был. Очень трудно читать
В C# еще не сделаешь как в C++ переходы в switch из одного case в другой, в С++ break не обязателен и если его нет, то выполниться код следующего case, в C# break в case обязателен, по этому что бы сделать аналогичное C++ поведение необходимо использовать goto
0
Заблокирован
04.01.2011, 06:17
Цитата Сообщение от s-kvv Посмотреть сообщение
Видимо в то время программисты повально использовали этот оператор где надо и ненадо. А щас начали фильтровать свой код. Хотя как-то видел пример программы на C# где почти все на goto. Вроде калькулятор был. Очень трудно читать
Дык, никто вроде и не говорит, что goto нужно использовать повсеместно. Скорее наоборот - нужно по-возможности не использовать. Но и не впадать в фанатизм.
1
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
04.01.2011, 06:25
я о том же)
0
Заблокирован
08.01.2011, 13:30
http://insidecpp.ru/art/7/
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
08.01.2011, 13:51
Цитата Сообщение от NightmareZ Посмотреть сообщение
Вот тебе код на C (без плюсов). Покажи, как сделать красиво без goto.

с 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
int myFunc()
{
   int result = -1;
 
   void *p1 = NULL;
   void *p2 = NULL;
   void *p3 = NULL;
   /* .... */
  
   p1 = malloc(10);
   if (!p1) goto ERROR;
 
   p2 = malloc(20);
   if (!p2) goto ERROR;
 
   p3 = malloc(30);
   if (!p3) goto ERROR;
   
   /* .... */
 
   if (/* some error */) goto ERROR;
 
   /* .... */
 
   if (/* some error */) goto ERROR;
 
   /* .... */
 
   result = OK;
ERROR:
   if (p1) free(p1);
   if (p2) free(p2);
   if (p3) free(p2);
   /* .... */
 
  return result;
}


без 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
int myFunc()
{
//  int result = -1;
 
    void *p1 = NULL;
    void *p2 = NULL;
    void *p3 = NULL;
    /* .... */
 
    p1 = malloc(10);
    if (!p1) return error();
 
    p2 = malloc(20);
    if (!p2) return error();
 
    p3 = malloc(30);
    if (!p3) return error();
 
    /* .... */
 
    if (/* some error */) return error();
 
    /* .... */
 
    if (/* some error */) return error();
 
    /* .... */
 
    error();
    result = OK;
    return result;
}
int error(void)
{
    if (p1) free(p1);
    if (p2) free(p2);
    if (p3) free(p2);
    /* .... */
    return -1;
}
0
Заблокирован
08.01.2011, 13:55
Цитата Сообщение от NightmareZ Посмотреть сообщение
Симпатичная девушка эта Goto ... да и заметка тоже в тему.
0
Заблокирован
08.01.2011, 13:59
Цитата Сообщение от d3nver Посмотреть сообщение
без 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
int myFunc()
{
//  int result = -1;
 
    void *p1 = NULL;
    void *p2 = NULL;
    void *p3 = NULL;
    /* .... */
 
    p1 = malloc(10);
    if (!p1) return error();
 
    p2 = malloc(20);
    if (!p2) return error();
 
    p3 = malloc(30);
    if (!p3) return error();
 
    /* .... */
 
    if (/* some error */) return error();
 
    /* .... */
 
    if (/* some error */) return error();
 
    /* .... */
 
    error();
    result = OK;
    return result;
}
int error(void)
{
    if (p1) free(p1);
    if (p2) free(p2);
    if (p3) free(p2);
    /* .... */
    return -1;
}
Ввести лишнюю функцию не так уж и сложно. Но ты забыл ещё вынести объявления переменных-указателей за пределы функции myFunc. В результате получится вместо одной функции - две плюс несколько глобальных переменных. И тогда, чтобы потенциальный пользователь этого кода ничего не поломал, нужно вынести всё это в отдельный файл, объявить myFunc в хедере, который потом поключать и.... "Ну ты понел...." ©
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
08.01.2011, 14:06
Цитата Сообщение от NightmareZ Посмотреть сообщение
Ввести лишнюю функцию не так уж и сложно. Но ты забыл ещё вынести объявления переменных-указателей за пределы функции myFunc. В результате получится вместо одной функции - две плюс несколько глобальных переменных. И тогда, чтобы потенциальный пользователь этого кода ничего не поломал, нужно вынести всё это в отдельный файл, объявить myFunc в хедере, который потом поключать и.... "Ну ты понел...." ©
ога
вот и приходится ломать голову... и goto плохо и выносить переменные, создавать функцию - тоже плохо.
си этим всегда отличалось, зато какие изящные решения порой находятся )
0
Заблокирован
08.01.2011, 14:08
Цитата Сообщение от d3nver Посмотреть сообщение
ога
вот и приходится ломать голову... и goto плохо и выносить переменные, создавать функцию - тоже плохо.
си этим всегда отличалось, зато какие изящные решения порой находятся )
Чем тут goto плохо?
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
08.01.2011, 14:14
Цитата Сообщение от NightmareZ Посмотреть сообщение
Чем тут goto плохо?
я в общих чертах имел ввиду.
Если тебя устраивает в данном коде goto, я ничего не имею против. Главное что бы тебе нравилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2011, 14:14

выход из цикла
как обеспечить выход из цикла: do { if() {после выполнения условия, идет выход из цикла} else {цикл повторяется} ...

С++ Выход из цикла
Есть цикл, написанный в дополнительной функции. Нужно вывести сумму нескольких введенных чисел, если подходящей суммы нет,то вывести...

Выход из цикла
Есть цикл. Он выполняется. Долго. Пока он выполняется я нажимаю Esc и он становится на паузу. Как осуществить? Добавлено через 10...

Выход из цикла
Как сделать выход из цикла с помощью клавиши? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int fun(int z, int e); int main() { ...

Выход из цикла
Нужна помощь, не выходит из while, в чем проблема? Вот код Правда табуляция не робит:D Но тут и так понятно Gladiators =...


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

Или воспользуйтесь поиском по форуму:
33
Закрытая тема Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru