Безопасный ввод данных с клавиатуры |
Безопасный ввод данных с клавиатуры |
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 |
23.02.2012 23:33
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Но у этого метода есть один минус - программа становится уязвимой к введённым данным, получается, что если туда ввести чего-то очень много, то это что-то целиком запишется в оперативную память, что крайне нежелательно. Пример "уязвимости" - в студию. Ибо пока вот что получается:uses crt;Попробуй эту "уязвимость" использовать. Вводи "1 2 3 hello world". И не запуская программу скажи, чего ожидаешь от нее. Что должно произойти после того, как нажмешь Enter? А потом запусти и посмотри, что произойдет. Так что в дебри действительно не надо лезть. Тем более в Ассемблер. Цитата И, кстати, такая печалька: free pascal 2.6.0 на linux ubuntu 10.04.3 операцию Mem не понимает. Пишет "Identifier not found" Пичалька в том, что FPC вообще не понимает эту операцию: Reference for unit 'System': Variables: Mem/MemW/MemL доступны только в DOSСообщение отредактировано: IUnknown - 23.02.2012 23:48 |
Текстовая версия | 2.06.2024 5:47 |