Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 11:22   #1
guz
Пользователь
 
Регистрация: 29.10.2010
Сообщений: 29
По умолчанию pure C (ANSI C, если хотите) выход из цикла в два разных места

Код:
int function(void)
{
	int result;	
	do
	{
		if(/* cnd_1 */)
		{
			if(/* cnd_2 */)
			{
				// code_2
				label:
				if(/* cnd_3 */)
				{
					// code_3
				}
				else if(/* cnd_4 */)
				{
					if(/* cnd_5 */)
					{
						// code_4
					}
					else
					{
						// code_5
						result = 3;
						break;
					}
				}
				else
				{
					goto label;
				}
			}
			else
			{
				// code_1
			}
		}
		else
		{
			result = 2;
			break;
		}	
		// code_7
		result = 1;
	}
	while(0);	
	// code_6
	return result;
}
Все </* cnd_X */> - состоят из вычисления функций и логических операторов.
Каждый участок кода <// code_X> используется один раз.

Вопрос стоит следующий: как сделать выход из цикла в два разных места, не использую goto?

Вопрос возник в процессе востановления исходников из результатов дизассемблирования.

Спасибо за внимание

Последний раз редактировалось guz; 29.10.2010 в 11:43. Причина: забыл о предпросмотре
guz вне форума Ответить с цитированием
Старый 29.10.2010, 12:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

дополнительно использовать логические флаги в циклах
p51x на форуме Ответить с цитированием
Старый 29.10.2010, 18:14   #3
guz
Пользователь
 
Регистрация: 29.10.2010
Сообщений: 29
По умолчанию

Цитата:
дополнительно использовать логические флаги в циклах
и что?

Используя флаг внутри цикла можно выйти (с помощью break) ИЗ разных мест цикла в одно место (сразу за циклом) а не В два разных места.
guz вне форума Ответить с цитированием
Старый 29.10.2010, 18:56   #4
guz
Пользователь
 
Регистрация: 29.10.2010
Сообщений: 29
По умолчанию

Ну что? На вопросы нубов ответы сыплются активно...

Неужели ни у кого нет никаких мыслей по моему вопросу?
Ответ "решения не существует" тоже ответ

Столкнулся с вопросом и начал сомневаться в себе, иначе бы не спросил.
guz вне форума Ответить с цитированием
Старый 30.10.2010, 22:28   #5
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

мож я чего то не понял, напрашивается вариант так:

Код:
bool flag;

do
{
...
    if ( ) 
    {
         flag = 1;
         breake;
    }
    if ( )
    { 
         flag = 0;
         breake;
    }
}
while ( );

if ( flag )
{
//выход в место 1
}
else
{
//выход в место 2
}
coinkrsk вне форума Ответить с цитированием
Старый 30.10.2010, 22:35   #6
elja_1989
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 58
По умолчанию

брик убивает цикл, а идти в место это не его работа.. нужно правильно думать как определить в какое место идти после и во время цикла до брика.
elja_1989 вне форума Ответить с цитированием
Старый 29.01.2012, 00:08   #7
j2ko
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 25
По умолчанию

Код:
int function(void)
{
	int result;	
	do
	{
		if(/* cnd_1 */)
		{
			if(/* cnd_2 */)
			{
				// code_2
				do
				{
					if(/* cnd_3 */)
					{
						// code_3
					}
					else if(/* cnd_4 */)
					{
						if(/* cnd_5 */)
						{
							// code_4
						}
						else
						{
							// code_5
							result = 3;
							break;
						}
					}
					else
						continue;
				}
				while (0);
				if(result == 3)
				    break;
			}
			else
			{
				// code_1
			}
		}
		else
		{
			result = 2;
			break;
		}	
		// code_7
		result = 1;
	}
	while(0);	
	// code_6
	return result;
}
j2ko вне форума Ответить с цитированием
Старый 29.01.2012, 12:44   #8
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

j2ko, не будет работать по двум причинам. Во-первых, там вложенный break, вы меняете его смысл. Во-вторых, continue проверяет условие перед выходом из цикла.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 29.01.2012, 14:52   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от guz Посмотреть сообщение
Вопрос стоит следующий: как сделать выход из цикла в два разных места, не использую goto?
Для начала написать адекватный код, в котором не будет 10 вложенных условий
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из цикла vandrouny Общие вопросы Delphi 5 27.05.2010 20:23
Выход из цикла Сергей089 Помощь студентам 6 17.03.2010 16:44
выход из цикла varelik Общие вопросы Delphi 13 24.12.2009 20:42
Выход из цикла RIO Помощь студентам 1 21.04.2008 22:55