Выбрать главу

  break;

 case 4: do_something_else();

  break;

}

Если переменная i в этом фрагменте кода получает значение 1, 2 или 3, вызывается функция do_something(). Если же значение переменной i равно 4, делается обращение к функции do_something_else(). Использование "пачки" нескольких пустых case-ветвей характерно для случаев, когда они используют один и тот же код.

Вложенные инструкции switch

Инструкция switch может быть использована как часть case -последовательности внешней инструкции switch. В этом случае она называется вложенной инструкцией switch. Необходимо отметить, что case-константы внутренних и внешних инструкций switch могут иметь одинаковые значения, при этом никаких конфликтов не возникнет. Например, следующий фрагмент кода вполне допустим.

switch(ch1) {

 case 'А': cout <<"Эта константа А - часть внешней инструкции switch";

  switch(ch2) {

   case 'A': cout <<"Эта константа A - часть внутренней инструкции switch";

    break;

   case 'В': // ...

  }

  break;

 case 'В': // ...

Цикл while

Инструкция whileеще один способ организации циклов в C++.

Общая форма цикла while имеет такой вид:

while(выражение) инструкция;

Здесь под элементом инструкция понимается либо одиночная инструкция, либо блок инструкций. Работой цикла управляет элемент выражение, который представляет собой любое допустимое С++-выражение. Элемент инструкция выполняется до тех пор, пока условное выражение возвращает значение ИСТИНА. Как только это выражение становится ложным, управление передается инструкции, которая следует за этим циклом.

Использование цикла while демонстрируется на примере следующей небольшой программы. Практически все компиляторы поддерживают расширенный набор символов, который не ограничивается символами ASCII. В расширенный набор часто включаются специальные символы и некоторые буквы из алфавитов иностранных языков. ASCII-символы используют значения, не превышающие число 127, а расширенный набор символов— значения из диапазона 128-255. При выполнении этой программы выводятся все символы, значения которых лежат в диапазоне 32-255 (32 — это код пробела). Выполнив эту программу, вы должны увидеть ряд очень интересных символов.

/* Эта программа выводит все печатаемые символы, включая расширенный набор символов, если таковой существует.

*/

#include <iostream>

using namespace std;

int main(){

 unsigned char ch;

 ch = 32;

 while(ch) {

  cout << ch;

  ch++;

 }

 return 0;

}

Рассмотрим while-выражение из предыдущей программы. Возможно, вас удивило, что оно состоит всего лишь из одной переменной ch. Но "ларчик" здесь открывается просто. Поскольку переменная ch имеет здесь тип unsigned char, она может содержать значения от 0 до 255. Если ее значение равно 255, то после инкрементирования оно "сбрасывается" в нуль. Следовательно, факт равенства значения переменной ch нулю служит удобным способом завершить while-цикл.

Подобно циклу for, условное выражение проверяется при входе в цикл while, а это значит, что тело цикла (при ложном результате вычисления условного выражения) может не выполниться ни разу. Это свойство цикла устраняет необходимость отдельного тестирования до начала цикла. Следующая программа выводит строку, состоящую из точек. Количество отображаемых точек равно значению, которое вводит пользователь. Программа не позволяет "рисовать" строки, если их длина превышает 80 символов. Проверка на допустимость числа выводимых точек выполняется внутри условного выражения цикла, а не снаружи.

#include <iostream>

using namespace std;

int main()

{

 int len;

 cout << "Введите длину строки (от 1 до 79): ";