Шаг 206.
Microsoft Visual C++ 2010. Язык С/С++.
Управление исключительными ситуациями. Пример 1

    На этом шаге мы рассмотрим простейший пример использования обработчика прерывания.

    В этом примере обнаруживается ошибка превышения длины вводимой с клавиатуры строки: для ее размещения выделено всего 10 байтов, а мы вводим более 10 байтов. Хотя функция getline() контролирует количество вводимых символов с помощью своего 2-го параметра lim, но он задан большим, чем 10, и поэтому этот контроль не срабатывает. Создадим консольную программу, текст которой приведен ниже, результат работы программы показан на рисунке 1.

// 206_1.cpp: главный файл проекта.

#include "stdafx.h"

#include <stdio.h>     //for getchar(),putchar()
#include <conio.h>     //for getch()
#include <stdlib.h>    //atoi(),atof()
#define eof -1         //Ctrl+z 
#define MAXLINE 1000

using namespace System;

// Функция getline(s, lim) вводит с клавиатуры 
// строку в s и возвращает длину введенной строки 
// с учетом символа '\0';
// lim - максимальное количество символов, 
// которое можно ввести в строку s
int getline(char s[], int lim) throw(...)
// Внутри функции могут возникать любые исключения: 
// еще один вариант задания выброски исключения. 
{
	int c, i;
	for(i = 0; i < lim - 1 && (c=getchar()) != eof && 
		c != '\n'; i++) 
		s[i] = c; 
	s[i] = '\0';
	i++;    //для учета количества 
	return i;
}

void main()
{
	try {
		//отвели место для строки из 10 символов
		char *buf  = new char[10]; 
		int rez = getline(buf, 200); 
		//"ошиблись": максимальная длина строки задана
		//в 200 символов

		//этот оператор выбросит исключение, 
		//если условие будет истинным
		if (rez >= 10) throw 1;
		delete[] buf;
	}
	catch (...)   //обработчик исключения любого типа
	{
		Console::WriteLine("Исключение!");
	}
	Console::ReadLine();  //Задержка экрана
}
Архив проекта можно взять здесь.


Рис.1. Обработка любой исключительной ситуации (здесь набрано более 10 символов)

    На следующем шаге мы рассмотрим основные классы исключений.




Предыдущий шаг Содержание Следующий шаг