Тангенциально связанные ...
Обычная практика получения интерактивного ввода - избегать использования "Integer_Text_IO" и связанных пакетов для Gets, вместо этого используйте Get_Line и затем выполняйте преобразование. E.g.:
S : String(1..200);
L : Natural;
...
Ada.Text_IO.Put(Item => "Enter a starting Integer: ");
Ada.Text_IO.Get_Line(Item => S, Last => L);
Start_Int := Integer'Value(S(1..L));
Этот подход облегчает проверку пользователя, вводящего C / R (L = 0), и в то время как числовые процедуры Get читают символы только до тех пор, пока они соответствуют синтаксису числового литерала, до конца В-третьих, захватывая всю строку с помощью Get_Line, вы избегаете необходимости решать проблему конца строки и можете убедиться, что все из того, что было введено, было числовым литералом (перехватывая Исключение Constraint_Error, если оно возникает при оценке атрибута «Значение».
И хотя это было больше проблемой с более ранними компиляторами Ada, процедуры Get не всегда работали одинаково на разных платформах из-за различных системных соглашений для обозначения конца строки, конца файла и т. Д. Однако Get_Line, в значительной степени работали одинаково на всех платформах, и поэтому это и последующее преобразование строки-> число были широко рекомендуемой практикой.