Я хочу спрыгнуть с середины a switch
оператор, к инструкции циклов в следующем коде:
while (something = get_something())
{
switch (something)
{
case A:
case B:
break;
default:
// get another something and try again
continue;
}
// do something for a handled something
do_something();
}
Это допустимый способ использовать continue
? continue
операторы, проигнорированные switch
операторы? C и C++ расходятся в своем поведении здесь?
Ничего страшного, утверждение continue
относится к замкнутому циклу, и ваш код должен быть эквивалентен (избегая таких прыжковых утверждений):
while (something = get_something()) {
if (something == A || something == B)
do_something();
}
Но если вы ожидаете, что break
выйдет из цикла, как подсказывает ваш комментарий (он всегда повторяет попытку с чем-то другим, пока не вычислит ложь), вам понадобится другая структура.
Например:
do {
something = get_something();
} while (!(something == A || something == B));
do_something();
Да, все в порядке - это просто нравится использовать его в , если
утверждение. Конечно, вы не можете использовать разрыв
, чтобы вырваться из петли изнутри переключателя.
В то время как технически действительны, все эти прыжки неясных контрольных потоков - особенно , продолжайте оператор
.
Я бы использовал такой трюк как крайний курорт, не первый.
Как насчет
while (something = get_something())
{
switch (something)
{
case A:
case B:
do_something();
}
}
это короче и выполняет свои вещи более четкими способом.
Позвольте им попробовать его через удаленный рабочий стол или VNC.
-121--4716464-Краткий ответ: используйте любой механизм, который предоставляют библиотеки подключений, он действительно не имеет никакого отношения к базе данных. Если вы используете ADO, у вас есть параметризованные запросы, если вы используете что-то другое (я ничего не знаю о PHP), то используйте все, что предлагает эта библиотека.
Перекатывание ваших собственных, вероятно, плохая идея, потому что вы с большой вероятностью получите что-то неправильное, например, правильно обращаться с разделителями комментариев.
-121--1918177-Синтаксически правильно и стилистически нормально.
Хороший стиль требует, чтобы каждый случай:
оператор должен заканчиваться одним из следующих:
break;
continue;
return (x);
exit (x);
throw (x);
//fallthrough
Кроме того, допускается следующий случай (x):
немедленно с
case (y):
default:
- объединение нескольких случаев, которые имеют точно такой же эффект.
Все остальное считается ошибкой, как и , если (a = 4) {...}
Конечно, необходимо замкнуть петлю ( пока
, для
, сделать... пока
) для продолжить
работу. Он не будет закольцовываться только в case ()
. Но конструкция типа:
while(record = getNewRecord())
{
switch(record.type)
{
case RECORD_TYPE_...;
...
break;
default: //unknown type
continue; //skip processing this record altogether.
}
//...more processing...
}
... это нормально.