0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7

Прекратить выполнение оператора if

13.01.2010, 09:29. Показов 29094. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возропщем вопрос такой, что можно использовать чтобы прекратить выполнение оператора if перерыл весь инет так и не нашел
к примеру:
C++
1
2
3
4
5
6
7
8
9
if(a>b)
     {
     std::cout<<"hellow"<<std::endl;
  // допустим в этом месте мне надо прекратить выполнение оператора дак что сюда вписать ?:(
     }
else 
    {
     std::cout<<"bay-bay"<<std::endl;
    }
пробовал использовать return; но непомгло
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.01.2010, 09:29
Ответы с готовыми решениями:

Как прекратить выполнение функции?
Приветствую форумчан) С циклами все понятно - break, а как выйти из функции? Например, у меня возникает ошибка при выполнении функции, я ее...

Как прекратить выполнение апплета?
При выполнении заданного условия (в апплете) хочется прекратить выполнение апплета. Как?

Прекратить выполнение ADOQuery.Insert;
Есть кнопка каторая переходит на новую форму и добавляет строку в базу для ввода данных Form1.ADOQuery1.Insert; ...

23
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
13.01.2010, 09:39
break; кажется должен работать
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
13.01.2010, 09:42
Avertus,

Code
1
2
3
4
5
6
7
8
9
if (..)
{
   do 
   {
      ы-ы-ы;
      break;
      у-у-у;
   } while (false);
}
0
 Аватар для vet
183 / 184 / 55
Регистрация: 08.04.2009
Сообщений: 1,309
13.01.2010, 09:44
Статья в
Википедии
Оправданное применение
Тем не менее, в практическом программировании применение GOTO в некоторых случаях можно считать допустимым. Поскольку GOTO — «простейший», «атомарный» оператор перехода, а все остальные являются «составными», производными от него, то применение GOTO допустимо и оправданно, когда другие средства языка не реализуют или недостаточно эффективно реализуют нужную функциональность. К таким случаям можно отнести:

[править] Выход из нескольких вложенных циклов сразу
Обычно считается, что в языках, где операторы досрочного завершения цикла (такие, как break и continue в Си) могут относиться только к тому из вложенных циклов, в котором они расположены, использование goto допустимо, чтобы выйти из нескольких вложенных циклов сразу. Здесь GOTO значительно упрощает программу, избавляя от необходимости создания вспомогательных переменных-флагов и условных операторов.

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

Пример:

int matrix[n][m];
int value;
...
for(int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (matrix[i][j] == value)
{
printf("value %d found in cell (%d,%d)\n",value,i,j);
//act if found
goto end_loop;
}
printf("value %d not found\n",value);
//act if not found
end_loop: ;
Прямолинейный способ избавления от GOTO — создать дополнительную переменную-флаг, сигнализирующую, что надо выйти из внешнего цикла (после выхода из внутреннего по break) и обойти блок кода, выполняющийся, когда значение не найдено. Но вряд ли этот способ можно рекомендовать на практике, так как в результате код окажется загромождён проверками, станет длиннее и будет дольше работать. Но можно вынести код в функцию и использовать return.
http://ru.wikipedia.org/wiki/GOTO

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
main()
{
      int a=8,b=3;
 
if(a>b)
     {
     std::cout<<"hellow"<<std::endl;
   goto stop;
  // äîïóñòèì â ýòîì ìåñòå ìíå íàäî ïðåêðàòèòü âûïîëíåíèå îïåðàòîðà äàê ÷òî ñþäà âïèñàòü ?:(
     }
else 
    {
     std::cout<<"bay-bay"<<std::endl;
    }
    stop: ;
    cin.get();
    cin.get();
    
}
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
13.01.2010, 10:33
э-э-э-э...
ну, мне кажется, для прекращения выполнения оператора должна быть причина.
а причина описывается оператором if().
и получается вложенный if:
C++
1
2
3
4
5
6
7
8
9
10
if(a>b)
     {
     std::cout<<"hellow"<<std::endl;
     if(чего-то там) выполняем;
  // допустим в этом месте мне надо прекратить выполнение оператора дак что сюда вписать ?:(
     }
else 
    {
     std::cout<<"bay-bay"<<std::endl;
    }
0
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7
13.01.2010, 21:24  [ТС]
Цитата Сообщение от Rififi Посмотреть сообщение
Avertus,

Code
1
2
3
4
5
6
7
8
9
if (..)
{
   do 
   {
      ы-ы-ы;
      break;
      у-у-у;
   } while (false);
}
на break он ругается
error C2043: illegal break

и с goto тоже ругается и вопще мне казлось goto желательно не использовать.

Цитата Сообщение от Patch Посмотреть сообщение
э-э-э-э...
ну, мне кажется, для прекращения выполнения оператора должна быть причина.
а причина описывается оператором if().
и получается вложенный if:
Причина просто у меня в программе используется подрят несколько операторов if() и в самом конуе стоит else тоесть если не один из if не подходит он врубать else должен дак вот когда if() срабатывает он не останавливается а идет дальше
что бы неломать голову тут некому вот эта чатсть
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
void menu (void)
{
    char cmd[80];
    gets(cmd);
 
    if(!strcmp("help", cmd))//вызов функции хелп
       {
          help();
         return ;
       }
    
    if(!strcmp("exit", cmd))//вызов функции хелп
       {
          exit();
          return;
       }
    if(!strcmp("cle", cmd))//вызов функции хелп
       {
          cle();
          return;
       }
    if(!strcmp("tkrypt", cmd))//вызов функции 
       {
          tkrypt();
          return;
       }
    if(!strcmp("open", cmd))//вызов функции 
       {
          open();
          return;
       }
    if(!strcmp("tdekrypt", cmd))//вызов функции 
       {
          tdekrypt();
          return;
       }
     if(!strcmp("enter", cmd))//вызов функции 
       {
          enter();
          return;
       }
    else  printf("this command not faund\n");//неправильная команда
}
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
13.01.2010, 21:44
тебе тут else вообще не нужно
если сработал хоть один if за ним следует return.
если ни один не сработал - тогда "not found" без всяких else
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
13.01.2010, 22:11
Дабы не порождать тонны кода, может быть, лучше загнать в массив структур (char*; void(*)()) и циклом искать?
1
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7
13.01.2010, 22:40  [ТС]
Цитата Сообщение от DrMcSheen Посмотреть сообщение
тебе тут else вообще не нужно
если сработал хоть один if за ним следует return.
если ни один не сработал - тогда "not found" без всяких else
в том то и прикол когда срабатывает if() у меня также пишет и действие при else
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
13.01.2010, 22:55
Цитата Сообщение от Avertus Посмотреть сообщение
return; но непомгло
Цитата Сообщение от Avertus Посмотреть сообщение
и с goto тоже ругается
а можно эту брань дословно?
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
14.01.2010, 01:47
Avertus,

на break он ругается
error C2043: illegal break


значит ты сделал что-то не так.
потому что break - он простой как удар лопатой.
1
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7
14.01.2010, 21:31  [ТС]
Цитата Сообщение от Rififi Посмотреть сообщение
Avertus,

на break он ругается
error C2043: illegal break


значит ты сделал что-то не так.
потому что break - он простой как удар лопатой.
Все разобрался незнаю почему я занес весь поток if -фов в main и все заработало

Тока встала новая проблема вместе с if() он из for выкидывает
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
14.01.2010, 22:53
Цитата Сообщение от Avertus Посмотреть сообщение
Тока встала новая проблема вместе с if() он из for выкидывает
Ну эт естественно. break прерывает именно исполнение цикла (for, do, while).
0
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7
15.01.2010, 08:33  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Ну эт естественно. break прерывает именно исполнение цикла (for, do, while).
Дак каким образом то реализовать мне эту фигню break не канает пробовал в отделюную процедуру это вынести и использовать return тоже не помогло
0
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 5
15.01.2010, 15:39
Киньте в меня тапком, а switch использовать что не позволяет ?
0
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7
15.01.2010, 15:45  [ТС]
Цитата Сообщение от Lich Посмотреть сообщение
Киньте в меня тапком, а switch использовать что не позволяет ?
а поподробней можно ?
0
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 5
15.01.2010, 15:49
Поподробнее вы сможете прочитать вот тут просто мне показалось, что данный оператор намного больше подходит для решения предоставленной задачи
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
15.01.2010, 22:27
Цитата Сообщение от Lich Посмотреть сообщение
Киньте в меня тапком, а switch использовать что не позволяет ?
В C/C++ switch со строками не работает.
А вот что не позволяет использовать
https://www.cyberforum.ru/showthread.php?p=477682
?
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
15.01.2010, 23:01
Цитата Сообщение от Avertus Посмотреть сообщение
Тока встала новая проблема вместе с if() он из for выкидывает
тебя не поймешь, а если бы у тебя return не заглючил, думаешь он из for не выкидывал бы штоль?
break прерывает и выходит из for.
continue прерывает следующие за ним операции и продолжает цикл с обновленным счетчиком.
0
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 5
16.01.2010, 22:28
Цитата Сообщение от Somebody Посмотреть сообщение
В C/C++ switch со строками не работает.
А вот что не позволяет использовать
https://www.cyberforum.ru/showthread.php?p=477682
?
Эм.. как мне показалось эта менюшка должна выходить в консоль, так почему бы не сделать тогда стандартный консольный выбор меню (по цифрам со списком комманд), с получением номера функции и полноправным switch'ем в любом случае.

Если вас не устраивает предложенный вариант вот ещё один: добавить флаг. В каждом теле оператора if рисуем приравнивание флага к 1, потом добовляем проверку флага тем же if'ом, пишем, что команда некорректна и обнуляем флаг, вот и всё.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2010, 22:28
Помогаю со студенческими работами здесь

прекратить выполнение зациклившейся программы
пишу в eclipse, бывает косячу и программа зацикливается, не нашёл ни кнопки стоп, ни ответа в гугле. Как убить процесс программы не...

Как прекратить выполнение асинхронного метода
Есть форма. По событию mouseUp исполняется следующий код: _isDragging = false; if (_isClickOnly) { ...

По нажатию кнопки прекратить выполнение прерывания 1Ch
Здравствуйте. Нужна помощь с выполнением задания. Задание заключается в том, чтобы переопределить прерывание 1Ch на вывод сообщения на...

Оператор, с помощью которого можно прекратить выполнение цикла...
Задача:назвать оператор, с помощью которого можно выскочить из цикла(перейти к следующему за циклом оператору) и оператор, с помощью...

Прекратить выполнение процедуры в случае истинности первого встретившегося условия
Вопрос заключается в следующем, есть процедура, в которой содержатся 10 условий, существует ли такая конструкция или можно её сделать,с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru