Поломки при вводе
Поломки при вводе
Предположим, что в интерактивной системе необходимо выдать подсказку пользователю, от которого требуется ввести целое. Пусть только одна процедура занимается вводом целых - read_one_integer, которая результат ввода присваивает атрибуту last_integer_read. Эта процедура работает неустойчиво, - если на ее входе будет нечто, отличное от целого, она может привести к отказу, выбрасывая исключение. Конечно, вы не хотите, чтобы это событие приводило к отказу всей системы. Но поскольку вы не управляете программой ввода, то следует ее использовать и организовать восстановление ситуации, при возникновении исключений. Вот возможная схема:
get_integer is
-- Получить целое от пользователя и сделать его доступным в
-- last_integer_read.
-- Если ввод некорректен, запросить повторения, столько раз,
-- сколько необходимо.
do
print ("Пожалуйста, введите целое: ")
read_one_integer
rescue
retry
end
Эта версия программы иллюстрирует стратегию повторения.
Очевидный недостаток - пользователь упорно вводит ошибочное значение, программа упорно запрашивает значение. Это не очень хорошее решение. Можно ввести верхнюю границу, скажем 5, числа попыток. Вот пересмотренная версия:
Maximum_attempts: INTEGER is 5
-- Число попыток, допустимых при вводе целого.
get_integer is
-- Попытка чтения целого, делая максимум Maximum_attempts попыток.
-- Установить значение integer_was_read в true или false
-- в зависимости от успеха чтения.
-- При успехе сделать целое доступным в last_integer_read.
local
attempts: INTEGER
do
if attempts < Maximum_attempts then
print ("Пожалуйста, введите целое: ")
read_one_integer
integer_was_read := True
else
integer_was_read := False
end
rescue
attempts := attempts + 1
retry
end
Предполагается, что включающий класс имеет булев атрибут integer_was_read.
Вызывающая программа должна использовать эту программу следующим образом, пытаясь введенное целое присвоить сущности n:
get_integer
if integer_was_read then
n := last_integer_read
else
"Иметь дело со случаем, в котором невозможно получить целое"
end
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Автозамена как средство предотвращения ошибок при вводе
Автозамена как средство предотвращения ошибок при вводе В данном разделе мы рассмотрим механизм автозамены, использование которого позволяет избежать случайных ошибок, возникающих при вводе тех либо иных данных (текстовых, в формате даты и др.). Его смысл заключается в
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе Предположим, вы хотите скопировать текстовый файл в объект string. На первый взгляд следующее решение выглядит вполне разумно:ifstream inputFile("interestringData.txt");string fileData(istream_iterator<char>(inputFile)), //
Поиск величины при вводе
Поиск величины при вводе Каким способом можно производить поиск подходящих величин в момент ввода? Табличный курсор (визуально) должен перемещаться к наиболее подходящему значению при добавлении пользователем новых символов водимой величины.Первоначально код писался
Предупреждение дублирования записей при вводе их из формы
Предупреждение дублирования записей при вводе их из формы В главе 11 мы обсуждали вопрос об очистке базы данных от повторяющихся записей, которые попали в таблицы, и выяснили, что этот механизм может работать и в профилактическом режиме, предотвращая попадание дубликатов
18.7.2. Применение цикла while при вводе с клавиатуры
18.7.2. Применение цикла while при вводе с клавиатуры Цикл while может применяться для ввода информации с клавиатуры. В следующем примере введенная информация присваивается переменной film. Если нажать клавиши [Ctrl+D], цикл завершает выполнение.$ pg whileread#!/bin/sh# whilereadecho " type <CTRL?D> to
6 О вводе
6 О вводе ОДНО ИЗ ГЛАВНЫХ ПРЕИМУЩЕСТВ Интернета заключается в том, что он позволяет человеку не только изучать и использовать контент, но и участвовать в его создании. В мобильных технологиях правильная организация ввода данных — вопрос не менее важный, чем их
Голубятня: Об Алёне из Эволвы и пальцевом вводе косинуса Сергей Голубицкий
Голубятня: Об Алёне из Эволвы и пальцевом вводе косинуса Сергей Голубицкий Опубликовано 05 февраля 2013 года В минувшую пятницу так увлекся музыкальными эмоциями, что напрочь забыл подвести итоги нашей викторины и поздравить победителей :) Сегодня
Об Алёне из Эволвы и пальцевом вводе косинуса Сергей Голубицкий
Об Алёне из Эволвы и пальцевом вводе косинуса Сергей Голубицкий Опубликовано 05 февраля 2013 В минувшую пятницу так увлекся музыкальными эмоциями, что напрочь забыл подвести итоги нашей викторины и поздравить победителей :) Сегодня непременно