Оператор switch (C)
Операторы switch и case помогают управлять сложными условными операциями и операциями ветвления. Оператор switch передает управление в оператор внутри своего тела.
Синтаксис
selection-statement :
switch ( expression ) statement
labeled-statement :
case constant-expression : statement
default : statement
Комментарии
Оператор switch передает управление одному из labeled-statement в своем теле в зависимости от значения expression .
Значения expression и значение каждого constant-expression должны иметь целочисленный тип. Выражение constant-expression должно иметь однозначное константное целочисленное значение во время компиляции.
Управление передается оператору case , значение constant-expression которого соответствует значению выражения expression . Оператор switch может содержать неограниченное число экземпляров case . Однако значения ни одной из пар выражений constant-expression в одном операторе switch не должны совпадать. Выполнение тела оператора switch начинается с первого соответствующего оператора labeled-statement или после него. Выполнение продолжается до конца тела оператора или пока оператор break не передаст управление за пределы тела.
Оператор switch обычно используется следующим образом:
switch ( expression ) < // declarations // . . . case constant_expression: // statements executed if the expression equals the // value of this constant_expression break; default: // statements executed if expression does not equal // any case constant_expression >
Оператор break можно использовать для завершения обработки определенного оператора с меткой в операторе switch . Он выполняет ветвление до конца оператора switch . Без оператора break выполнение программы продолжается до следующего оператора с меткой. Операторы будут выполняться до достижения оператора break или конца всего оператора. В некоторых случаях может требоваться именно такое поведение.
Оператор default выполняется, если ни одно из значений case constant-expression не равно значению expression . Если оператор default не указан и соответствующий вариант case не найден, ни один из операторов в теле оператора switch не выполняется. Допускается не более одного оператора default . Оператор default не обязательно должен находиться в конце. Он может располагаться в любом месте тела оператора switch . Метка case или default может располагаться только внутри оператора switch .
Выражения switch expression и case constant-expression должны быть целочисленного типа. Значение каждого case constant-expression в теле оператора должно быть уникальным.
Метки case и default тела оператора switch имеют значения только при начальной проверке, которая определяет, с какого места тела оператора начинается выполнение. Операторы switch могут быть вложенными. Любые статические переменные инициализируются до выполнения любых операторов switch .
Объявления могут располагаться в начале составного оператора, образующего тело оператора switch , но инициализации, включенные в объявления, не выполняются. Оператор switch передает управление непосредственно на выполняемый оператор в теле, минуя все строки, содержащие инициализации.
В следующих примерах кода показаны операторы switch :
switch( c )
В этом примере, если переменная c равна ‘A’ , выполняются все три оператора тела switch , так как оператор break перед следующим оператором case отсутствует. Управления передается первому оператору ( capital_a++; ) и продолжается по-порядку во всей остальной части тела. Если переменная c равна ‘a’ , увеличиваются значения переменных letter_a и total . Если переменная c не равна ‘A’ или ‘a’ , увеличивается только значение переменной total .
switch( i )
В этом примере оператор break указан после каждого оператора тела switch . Оператор break вызывает принудительный выход из тела оператора после выполнения одного оператора. Если переменная i равна –1, увеличивается только значение переменной n . Оператор break после оператора n++; передает управление за пределы тела оператора, минуя оставшиеся операторы. Аналогично, если переменная i равна 0, увеличивается только значение переменной z ; если переменная i равна 1, увеличивается только значение переменной p . Заключительный оператор break , строго говоря, не требуется, так как управление передается из тела в конце составного оператора. Он добавлен для единообразия.
Один оператор может содержать несколько меток case , как показано в следующем примере:
switch( c )
В этом примере, если constant-expression равно любой букве между ‘a’ и ‘f’ , convert_hex вызывается функция .
Специально для систем Майкрософт
Microsoft C не ограничивает количество значений case в операторе switch . Это число ограничивается только объемом доступной памяти. ANSI C требует, чтобы в операторе switch можно было использовать не менее 257 меток case .
В Microsoft C расширения Майкрософт по умолчанию (default) включены. Используйте параметр компилятора /Za для отключения этих расширений.
Enumerable. Any Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Проверяет существование хотя бы одного элемента в последовательности.
Перегрузки
Проверяет, содержит ли последовательность какие-либо элементы.
Проверяет, удовлетворяет ли какой-либо элемент последовательности заданному условию.
Any(IEnumerable)
Проверяет, содержит ли последовательность какие-либо элементы.
public: generic [System::Runtime::CompilerServices::Extension] static bool Any(System::Collections::Generic::IEnumerable ^ source);
public static bool Any (this System.Collections.Generic.IEnumerable source);
static member Any : seq -> bool
Public Function Any(Of TSource) (source As IEnumerable(Of TSource)) As Boolean
Параметры типа
Тип элементов source .
Параметры
Возвращаемое значение
true , если исходная последовательность содержит какие-либо элементы, в противном случае — false .
Исключения
source имеет значение null .
Примеры
В следующем примере кода показано, как с помощью Any определить, содержит ли последовательность какие-либо элементы.
List numbers = new List < 1, 2 >; bool hasElements = numbers.Any(); Console.WriteLine("The list empty.", hasElements ? "is not" : "is"); // This code produces the following output: // // The list is not empty.
' Create a list of Integers. Dim numbers As New List(Of Integer)(New Integer() ) ' Determine if the list contains any items. Dim hasElements As Boolean = numbers.Any() ' Display the output. Dim text As String = IIf(hasElements, "not ", "") Console.WriteLine($"The list is empty.") ' This code produces the following output: ' ' The list is not empty.
Логическое значение, возвращаемое методом Any(IEnumerable) , обычно используется в предикате where предложения ( Where предложение в Visual Basic) или при прямом вызове Where(IEnumerable, Func) метода . В следующем примере показано использование Any метода .
class Pet < public string Name < get; set; >public int Age < get; set; >> class Person < public string LastName < get; set; >public Pet[] Pets < get; set; >> public static void AnyEx2() < Listpeople = new List < new Person < LastName = "Haas", Pets = new Pet[] < new Pet < Name="Barley", Age=10 >, new Pet < Name="Boots", Age=14 >, new Pet < Name="Whiskers", Age=6 >>>, new Person < LastName = "Fakhouri", Pets = new Pet[] < new Pet < Name = "Snowball", Age = 1>>>, new Person < LastName = "Antebi", Pets = new Pet[] < >>, new Person < LastName = "Philips", Pets = new Pet[] < new Pet < Name = "Sweetie", Age = 2>, new Pet < Name = "Rover", Age = 13>> > >; // Determine which people have a non-empty Pet array. IEnumerable names = from person in people where person.Pets.Any() select person.LastName; foreach (string name in names) < Console.WriteLine(name); >/* This code produces the following output: Haas Fakhouri Philips */ >
Structure Pet Public Name As String Public Age As Integer End Structure Structure Person Public LastName As String Public Pets() As Pet End Structure Sub AnyEx2() Dim people As New List(Of Person)(New Person() _ , New Pet With , New Pet With >>, New Person With >>, New Person With >, New Person With , New Pet With >>>) ' Determine which people have a non-empty Pet array. Dim names = From person In people Where person.Pets.Any() Select person.LastName For Each name As String In names Console.WriteLine(name) Next ' This code produces the following output: ' ' Haas ' Fakhouri ' Philips End Sub
Комментарии
Этот метод не возвращает ни один элемент коллекции. Вместо этого он определяет, содержит ли коллекция какие-либо элементы.
Перечисление source останавливается, как только можно определить результат.
В синтаксисе Aggregate Into Any() выражения запроса Visual Basic предложение преобразуется в вызов Any.
Как работать с алгоритмом any_of из стандартной библиотеки?
Ну, семантика — «существует хотя бы один такой элемент, что». А синтаксис — передача диапазона (где проверяем существование элемента) и предиката (какого именно элемента существование).
Например, проверка, есть ли среди чисел в векторе четное:
void even_check(const std::vector& v) < if (std::any_of(v.cbegin(), v.cend(), [](int i)< return i % 2 == 0; >)) < std::cout else < std::cout > int main() < std::vectorv; even_check(v); v.push_back(10); even_check(v); >
Ну, и на всякий случай (вдруг вы это хотели услышать): диапазон передается как два итератора. Синтаксического сахара в духе цикла по диапазону нет. Можно написать свой вариант для всего контейнера, типа
template bool any_in(const Container c, Pred p) < return any_of(cbegin(c),cend(c),p); >void even_check(std::vector& v) < if (any_in(v, [](int i)< return i % 2 == 0; >)) < std::cout else < std::cout >
Some, any, no: когда употребляются
Три простых неопределенных местоимения some, any и no создают немало сложностей у студентов. Вроде бы правила несложные, но тонкости употребления в английском языке подчас сбивают с толку и заставляют думать, что местоимения еще сложнее, чем артикли.
На самом деле это не так. Если коротко, то местоимение some понадобится вам в утвердительных предложениях, а any в отрицательных и вопросительных. А no мы используем, чтобы сделать отрицательное предложение, но при этом само предложение, т.е. глагол должны быть в утвердительной форме, т.к. в английском языке не может быть двух отрицаний в одном предложении. Давайте подробней рассмотрим правила употребления этих неопределенных местоимений в английских предложениях, а также разницу между ними.
Местоимение some — как применять
Some означает «несколько», «немного», «какой-нибудь», то есть небольшое количество. Такие местоимения ставятся перед существительными, чем напоминают артикли, однако, в отличие от них, неопределенные местоимения показывают количество или указывают на какого-то человека (предмет).
Some употребляется с существительными как с исчисляемыми, так и с неисчисляемыми.
Напоминаем, неисчисляемые — это такие существительные, которые нельзя посчитать (money, sugar, water, food, love и др.).
Some перед неисчисляемыми существительными вовсю используется в утвердительных предложениях:
I’m hot! I would like some water! — Мне жарко! Я бы хотела немного воды.
We can have some tea before we start our lesson. — Мы можем выпить немного чаю перед тем, как начнем урок.
We still have some money left. Let’s go to the restaraunt. — У нас еще осталось немного денег. Пошли в ресторан.
Также мы употребляем some перед исчисляемыми существительными во мн. ч.
Но: перед исчисляемыми существительными в ед. ч. some не используют. Это вполне логично, ведь some означает какое-то количество, поэтому мы его не можем употреблять перед существительными в ед. ч. Вместо него обязательно ставится неопределенный артикль a/an.
Сравните примеры:
I have an interesting book. — У меня есть интересная книга. (an interesting book – исчисляемое существительное в единственном числе).
I have some interesting books. — У меня есть несколько интересных книг. (some interesting books – исчисляемое существительное во множественном числе).
Some со множественным числом используется в значении «несколько», «немного»:
There are some people on the beach. – На пляже немного людей.
Используется ли some в вопросительных предложениях?
Как мы говорили ранее, some употребляется только в утвердительных предложениях и не употребляется в отрицательных предложениях или вопросах, но в этом правиле есть исключения. Мы используем some в вопросительных предложениях в следующих ситуациях:
Местоимение any — как применять
Местоимение any используют при постановке вопроса и в отрицаниях (в них ставить some нельзя!)
Примеры вопросительных предложений с any:
— Do you have any apples? – У тебя есть яблоки?
— Did he take any photographs? – Он сделал фотографии?
Если вам необходимо сделать отрицание, то сразу меняйте some на any. Тогда его можно перевести «какой-либо, сколько-нибудь, никакой»:
I did not have any chance. — У меня не было никакого шанса.
Do you have any popular magazines? — У тебя есть какие-нибудь популярные журналы?
Any может использоваться и с утверждением, но совсем в другом значении.
Any в утверждении переводится как «любой», «всякий», «какой угодно»:
Any girl wants to go on dates. — Любая девушка хочет ходить на свидания.
You can take any bus. — Ты можешь сесть на любой автобус.
Местоимение no — как применять
Используя местоимение no, мы можем сделать отрицательное предложение.
Отрицание возможно сделать двумя способами – через any, и через no. Смысл предложения от этого не изменится.
Местоимение no используется со всеми типами существительных независимо от их числа. No всегда ставится перед существительным. В английском языке в одном предложении не может быть двух отрицаний, поэтому мы либо строим отрицательное предложение с местоимением any, либо утвердительное с местоимением no.
Например,
He has no friends. = He hasn’t got any friends. У него нет друзей.
I have no money. = I haven’t got any money. У меня нет денег.
Таблица с неопределенными местоимениями в английском языке
Ну вот мы и разобрали основные примеры использования some, any и no. Главное, помнить, что в английском может быть только одно отрицание и стоять оно должно в правильном месте. Местоимение no можно употреблять только для образования отрицания, some – утвержения, а any – отрицания и вопроса. Не забывайте про исключение, в котором мы употребляем some в вопросительном предложении.
Желаем удачи!

А чтоб вы точно не запутались, мы составили краткую таблицу: