Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КНЕУ.doc
Скачиваний:
37
Добавлен:
07.03.2016
Размер:
3.9 Mб
Скачать

4.2.1. Умовний оператор switch

Формат оператора:

switch ( вираз )

{

case константний_вираз_1: [ список_операторів_1 ]

case константний_вираз_2: [ список_операторів_2 ]

...

case константний_вираз_n: [ список_операторів_n ]

[default: оператори ]

}

Виконання оператора починається з обчислення виразу. Тип виразу найчастіше цілочисельний (включаючи char) або рядковий. Потім управління передається першому операторові із списку, поміченому константним виразом, значення якого збіглося з обчисленим.

Всі константні вирази мають неявно приводитися до типу виразу в дужках. Якщо збігу не відбулося, виконуються оператори, розташовані після слова default (а при його відсутності управління передається наступному за switch операторові).

Після оператора case наявність блоку не обов'язкова. Кожен блок (гілка перемикача) повинен закінчуватись явним оператором break, goto або return:

  • оператор break виконує вихід з оператора switch;

  • оператор goto виконує перехід на вказану після нього мітку;

  • оператор return виконує вихід з функції, в тілі якої він записаний.

У лістингу 4.2. приведений приклад калькулятора на чотири прості дії.

Лістинг 4.2. Калькулятор на чотири дії

using System;

namespace ConsoleApplicationl

{class Classl

{static void Main( )

{

string buf;

double a, b, res;

Console.WriteLine("Введите первый операнд:");

buf = Console.ReadLine( );

a = double. Parse( buf );

Console.WriteLine("Введите знак операции");

char op = (char)Console.Read( );

Console.ReadLine();

Console.WriteLine("Введите второй операнд:");

buf = Console.ReadLine( );

b = double.Parse(buf);

bool ok = true;

switch (op)

{

case '+' : res = a + b; break;

case '-' : res = a - b; break;

case '*' : res = a * b; break;

case '/' : res = a / b; break;

default : res = double.NaN;

ok = false;

break;

}

if (ok) Console.WriteLine( "Результат: " + res );

elseConsole.WriteLine( "Недопустимая операция" );

}

}

}

Хоча наявність гілки default і не обов'язкова, рекомендується завжди обробляти випадок, коли значення виразу не збігається ні з однією з констант. Це полегшує пошук помилок при відладці програми.

У лістингу 4.3. приведений приклад використання оператора переходу goto.

Лістинг 4.3. Використання оператра goto

usingSystem;

class SwitchTest

{

static void Main()

{

Console.WriteLine(" Введіть 1, 2 або 3 ");

string s = Console.ReadLine();

int n = int.Parse(s);

int cost = 0;

switch(n)

{

case 1:

cost += 25;

break;

case 2:

cost += 25;

goto case 1;

case 3:

cost += 50;

goto case 1;

default:

Console.WriteLine("Натиснута не та клавіша");

break;

}

if (cost != 0)

Console.WriteLine("Значення: {0}", cost);

else

Console.WriteLine("Натиснута не та клавіша");

}}

При значенні змінної n = 2, cost = 50;

В лістингу 4.4 показаний приклад без використання операторів переходу.

Лістинг 4.4.

using System;

class SwitchTest

{

static void Main()

{

Console.WriteLine(" Введіть число ");

string s = Console.ReadLine();

int n = int.Parse(s);

switch(n)

{

case 1:

case 2:

case 3:

Console.WriteLine("Введено 1, 2, або 3");

break;

default:

Console.WriteLine("Натиснута не та клавіша");

break;

}

}

}

При n > 0 і n < 4 буде повідомлення “Введене 1, 2, або 3”.