Вопрос № 38324: Добрый день эксперты. Очень нужна ваша помощь. Такая ситуация: есит переменная perem типа integer. Если я вважу например 12bn или hn то происходит ошибка выполнения. Как в паскале выловить такую ошибку и попросить ввод еще раз? Спасибо за ответ!...
Вопрос № 38.324
Добрый день эксперты. Очень нужна ваша помощь. Такая ситуация: есит переменная perem типа integer. Если я вважу например 12bn или hn то происходит ошибка выполнения. Как в паскале выловить такую ошибку и попросить ввод еще раз? Спасибо за ответ!
Отправлен: 23.03.2006, 15:39
Вопрос задал: OlegMA (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, OlegMA!
Вызывает легкое недоумение Ваше упорное желание присвоить целочисленной переменной строковый тип данных. :) Я думаю более правильно Ваш вопрос должен звучать так: Как контролировать тип вводимых пользователем данных, чтобы прога не откинула ножки при введении неправильного типа. Если я ошибся - уточните.
1. Можно контролировать эту операцию сочетанием ключа компилятора {$I} и полчением кода ошибки с помощью функции IOResult.
Var
i: integer;
Begin
{$I-} {Отключаем контроль ввода}
ReadLn(i); {Вводим данные}
{$I+} {Включаем обратно}
If IOResult<>0 Then {Теперь, если введенные данные будут не целого типа IOResult будет отличатся от нуля}
WriteLn('Неправильный тип данных. Повторите ввод.'); {Выводим сообщение об ошибке}
End.
2. Другой способ - вводить любые данные в виде строки. Это более универсальное решение, т.к. строку, если она своими символами соответствует какому-то типу, можно преобразовать в любой тип.
Var
s: string;
i, err: integer;
Begin
ReadLn(s); {Вводим данные}
Val(s, i, err); {Преобразуем строку в целое число}
If err<>0 Then {Если в строке было что-то еще, кроме числовых символов, то в err будет позиция символа имеющего недопустимое для преобразования значение}
WriteLn('Неправильный тип данных. Повторите ввод.'); {Выводим сообщение об ошибке}
End.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 23.03.2006, 18:23