Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/140: Рейтинг темы: голосов - 140, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 7

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

13.01.2010, 09:29. Показов 29046. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru