Обычно в программировании при обработке корректности ввода используют синтаксические конструкции, обеспечивающие так называемую обработку исключений (т.е. исключительных, их ряда вон выходящих ситуаций). Если вы не знаете, как это делается и возможно ли это в языке программирования Паскаль, то можно пойти другим путем. Все, что вводит пользователь, следует "воспринимать" как строку. Это позволит избежать аварийного завершения программы, когда данным численного типа присваиваются нечисловые символы (пользователь осуществляет некорректный ввод). Однако следует помнить, что при этом объем кода существенно возрастает.
Приведем несколько примеров.
Пусть все, что вводит пользователь, сначала присваивается строчной переменной userinput. Также будем использовать метки.
Проверка корректности ввода системы счисления:
lab_notation: write('Notation: '); readln(userinput); if (length(userinput) = 1) and ((userinput[1] = '2') or (userinput[1] = '8')) then notation := ord(userinput[1]) - ord('0') else if (length(userinput) = 2) and (userinput[1] = '1') and (userinput[2] = '6') then notation := 16 else if (length(userinput) = 2) and (userinput[1] = '1') and (userinput[2] = '0') then notation := 10 else goto lab_notation;
Проверка знака операции приводилась на третьем этапе. Остается лишь в последнюю ветку else добавить метку перехода на начало ввода операции при некорректном вводе.
Для управляемого выхода из программы можно организовать переход на ее начало при нажатии клавиши. Проще всего это сделать с помощью оператора goto. Следует иметь в виду, что от goto можно легко избавиться, например, с помощью цикла while.
write('Continue (y)? '); readln(start); if start = 'y' then goto lab_notation;
Комментарии
Зачем goto? Неужели нельзя
Зачем goto? Неужели нельзя использовать процедуру?
И зачем эти readln..... if start...?
не проще ли
if readkey in ['y', 'Y'] then lab_notation();?
И можно обойтись без лишних переменных