Здравствуйте, Andrei N.Sobchuck, Вы писали:
LG>>я вот как раз и не хочу через исключения. И не хочу гоу-ту. LG>>Чего делать?
ANS>1. Не делать два цикла. ANS>2. Не выходить из циклов.
LG>while(1)
LG>{
LG> for(int i = 0; i < 100; i++)
LG> {
LG> if(i == 77)
LG> // вот тут хочу выйти вообще из всех циклов - из for и из while
LG> }
LG>}
LG>
LG>while(1)
LG>{
LG> for(int i = 0; i < 100; i++)
LG> {
LG> if(i == 77)
LG> // вот тут хочу выйти вообще из всех циклов - из for и из while
LG> }
LG>}
LG>
LG>Как это сделать?
Лично я стараюсь переписывать куски кода, которые мне не очень нравятся как-то по другому (структурно). Например, так:
/**
* @return true when no more cycles are needed
*/bool doAtomicProcessing()
{
for(int i = 0; i < 100; i++)
{
if(i == 77)
return true
}
return false;
}
bool exit = false;
do exit = doAtomicProcessing
while (!exit);
P>Безумно высокое количество откликов на этот в общем-то невинный вопрос говорит о том, P>что он попал в больное место — НУ НЕТ здесь нормального способа выйти. P>Почему бы нам всем не признать, что разработчики языка лоханулись, и просто ЗАБЫЛИ P>дать нам эту возможность. P>Ведь это было так просто — какое-нибудь ключевое слово типа breakbreak или break2. P>Предлагаю написать возмущённое письмо
P>ЗЫ: Меня давно мучит вопрос, а нельзя ли это как-то своими силами сделать — P>задефайнить как-нибудь, пусть даже и монстра какого-нибудь ассемблерного, P>но чтоб потом одно слово BREAKBREAK писать
По-моему, самый надёжный способ выйти из двух циклов — выйти по грамотно заданному условию, а не плодить говнище while true do, а потом спрашивать, а как мне из него выйти... =)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>>>1. Не делать два цикла. ANS>>>2. Не выходить из циклов.
ANS>>Забыл 3-й вариант — использовать return.
VD>Забыл четвертый... не использовать циклов!
5) использовать continuations
....
call/cc exit {
while (..) {
...
while (..) {
...
exit 0;
}
...
}
}
или
reset {
while (..) {
...
while (..) {
...
shift { };
}
...
}
}
Здравствуйте, Quintanar, Вы писали:
ANS>>>>1. Не делать два цикла. ANS>>>>2. Не выходить из циклов.
ANS>>>Забыл 3-й вариант — использовать return.
VD>>Забыл четвертый... не использовать циклов!
Q>5) использовать continuations