Использование ключевых слов checked и unchecked
Оценка 4.8

Использование ключевых слов checked и unchecked

Оценка 4.8
docx
18.11.2021
Использование ключевых слов checked и unchecked
Л2-002140.docx

Использование ключевых слов checked и unchecked

По умолчанию исключение OverflowException не генерируется. С# по- зволяет управлять генерированием исключений при возникновении пе- реполнения с помощью ключевых слов checked и unchecked, которые должны находиться в try-блоке.

Чтобы указать, что некоторое выражение должно быть проконтроли- ровано на предмет переполнения, используйте ключевое слово checked. А чтобы проигнорировать переполнение, используйте ключевое слово unchecked. В последнем случае результат будет усечен так, чтобы его тип соответствовал типу результата выражения. Режим unchecked дейст- вует в настройке среды VS по умолчанию.

 

Ключевое слово checked имеет две формы. Одна проверяет конкрет- ное выражение и называется операторной checked-формой. Другая же проверяет блок инструкций.

Формат:

 

checked (выражение)

или

checked

{

// Инструкции, подлежащие проверке.

}

 

Если значение контролируемого выражения переполнилось, генери- руется исключение типа OverflowException.

 

Ключевое слово unchecked имеет две формы. Одна из них опера- торная форма, которая позволяет игнорировать переполнение для за-


данного выражения. Вторая игнорирует переполнение, которое возмож- но в блоке инструкций.

 

Формат:

 

unchecked (выражение)

или

unchecked

{

// Инструкции, для которых переполнение игнорируется.

}

 

В случае переполнения выражение усекается:

byte a=127, b=127, result;

 

try {

result = checked ( (byte)(a*b) ); // инструкция вызовет

}                                                                 // исключение.

 

Примеры. Определить в программе несколько вещественных пере- менных. Ввести с клавиатуры их значения. В случае ввода неверных данных, используя блоки try и catch, реализовать повторный ввод.

 

Вариант 1. Для большого количества вводимых данных. Один блок try и один блок catch на все операции ввода. После обработки исключения повторяется весь выполненный ввод, включая правильный, заново. Этот вариант хорош для отладки, но не для итоговой программы.

 

using System; class TestTryCatch

{

public static void Main()

{

double a, b, c;

 

while (true)

{


try

{

 

 

 

 

 

 

 

 

 

}


 

Console.Write("Введи первое вещественное число:"); a = double.Parse(Console.ReadLine());

 

Console.Write("Введи второе вещественное число:"); b = double.Parse(Console.ReadLine());

 

Console.Write("Введи третье вещественное число:"); c = double.Parse(Console.ReadLine());

 

break;


 

catch

{


Console.WriteLine("\nВведено неверное данное! " + " Повторите весь ввод заново.\n");

// continue; //нужен, если после catch в этом

// цикле следует какая-либо обработка

}

} // while-end

 

 

Console.WriteLine("Ввод закончен!\n");

// далее основная часть программы

. . .

}

}

 

Вариант 2. Блоки try и catch на каждый оператор ввода. Самый про- стой вариант, но при большом количестве вводимых данных – самый длинный.

 

using System; class TestTryCatch

{

public static void Main()

{

double a, b;

 

while (true)

{

Console.Write("Введи первое вещественное число:"); try

{

a = double.Parse(Console.ReadLine()); break;

}

catch

{

Console.WriteLine("\nВведено неверное данное!\n");

}

}

 

 

while (true)

{

Console.Write("Введи второе вещественное число:"); try

{

b = double.Parse(Console.ReadLine()); break;

}

catch

{

Console.WriteLine("\nВведено неверное данное!\n");

}

}


Console.WriteLine("Ввод закончен!\n");

// далее основная часть программы

. . .

}

}

 

Вариант 3. Для большого количества вводимых данных. Один блок try и один блок catch на все операции ввода. Запоминается номер ошибоч- ного ввода. После обработки исключения повторяется только последний ошибочный ввод.

 

using System; class TestTryCatch

{

public static void Main()

{

double a, b, c; bool           rep=true;

int     n=1;                  // номер неудачного ввода

 

while (rep==true)

{

try

{

switch (n)

{

case 1:

Console.Write("Введи первое вещественное число:"); a = double.Parse(Console.ReadLine());

n = 2;                            // N следующего ввода

break; case 2:

Console.Write("Введи второе вещественное число:"); b = double.Parse(Console.ReadLine());

n = 3;

break; case 3:

Console.Write("Введи третье вещественное число:"); c = double.Parse(Console.ReadLine());

n = 1;              // для повтора программы

rep = false;        // для выхода из цикла while break;

}

}

 

catch

{

Console.WriteLine("\nВведено неверное данное!\n");

//continue; //если после catch в этом цикле следует обработка

}

} // while-end


rep=true;                                                          // для повтора программы

 

Console.WriteLine("Ввод закончен!\n");

// далее основная часть программы

. . .

}

}


 

Использование ключевых слов checked и unchecked

Использование ключевых слов checked и unchecked

Вторая игнорирует переполнение, которое возмож- но в блоке инструкций

Вторая игнорирует переполнение, которое возмож- но в блоке инструкций

{

{

Console.WriteLine("\n Введено неверное данное ! " + "

Console.WriteLine("\n Введено неверное данное ! " + "

Console.WriteLine(" Ввод закончен !\n"); // далее основная часть программы

Console.WriteLine(" Ввод закончен !\n"); // далее основная часть программы

Console.WriteLine(" Ввод закончен !\n"); // далее основная часть программы

Console.WriteLine(" Ввод закончен !\n"); // далее основная часть программы
Скачать файл