| Yegor |
23.02.2012 19:22
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Доброе время суток.
Необходимо реализовать безопасный ввод данных в программе, на паскале. Программе необходимо получить, допустим, 3 вещественных числа, которые вводятся с клавиатуры, но пользователь может ввести туда что-либо отличное от чисел. В таком случае необходимо, чтобы программа вывела сообщение об ошибке и попросила ввести данные заново. Я уже реализовал это таким способом, но он меня не совсем устраивает: Procedure Input_From_Keyboard(Var aa,bb,cc: real); Работает отлично, если, скажем, введена такая последовательность "-4 5 %" (знак процента числом, как видно, не является), но если ввести "-7 5 gj hu hfh eio", то программа после первого вывода сообщения об ошибке и нажатия клавиши выведет его ещё раз. Если ввести много левых данных через пробел, то она много раз выведет ошибку, так что приходится это много раз жать на "любую клавишу". Другой вариант Procedure Input_From_Keyboard(Var aa,bb,cc: real); Тут всё ещё печальнее, переменной bbb присваивается значение пробела. Использовать методику введения дополнительной переменной и записывания в неё пробелов как-то не хочется. На всякий случай Procedure Error_Message; Для компиляции используется Free Pascal 2.6.0 x64 на ОС Linux Ubuntu 10.04.3 (если это имеет какое-то значение) Сообщение отредактировано: Yegor - 23.02.2012 19:23 |
![]() ![]() |
| IUnknown |
24.02.2012 0:26
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Эта переменная s будет ненужным грузом в оперативной памяти. Ничего, что эта переменная описана локально? Как только ты вышел из процедуры - ее больше нет.Цитата А, насколько я знаю, есть ограничение в использовании оперативной памяти в 64 кб Я тебя умоляю, не смеши меня... На кой тебе под x64 такой компилятор был бы нужен, который ограничивал бы использование памяти 64-мя килобайтами?Цитата если не ошибаюсь, но при попытке создать большой массив сыпятся непонятные ошибки Максимальный размер одной структуры и общее ограничение объема доступной памяти - это несколько разные вещи. Но в любом случае единственное ограничение на размер массива, с которым я сталкивался на данный момент - это ограничение на размер индекса. Индексов не может быть больше, чем High(PTRINT). На 32-битной системе это 2147483647. То есть, массив на десяток мегабайт выделяется легко. Что за ошибки у тебя вылазили? |
Yegor Безопасный ввод данных с клавиатуры 23.02.2012 19:22
IUnknown Чтобы этого не происходило - надо кроме вывода слу... 23.02.2012 20:16
Yegor IUnknown, спасибо, помогло.
Но у этого метода есть... 23.02.2012 22:09
TarasBer > что если туда ввести чего-то очень много, то ... 23.02.2012 23:00
Yegor > что если туда ввести чего-то очень много, то ... 23.02.2012 23:12
IUnknown Пример "уязвимости" - в студию. Ибо пока... 23.02.2012 23:33
Yegor Не совсем корректно выразился. Эта переменная s бу... 23.02.2012 23:49
TarasBer >> readln(s); - вот как раз в переменной s
... 24.02.2012 9:32
Yegor Вот такие ошибки сыпятся, когда пытаюсь хотя бы со... 24.02.2012 15:55
TarasBer А ты умножь 100 000 на 100 000 на 10.
тебе 100 ги... 24.02.2012 16:44![]() ![]() |
|
Текстовая версия | 7.11.2025 19:25 |