Здравствуйте уважаемые эксперты ! Можно ли сделать защиту от ввода букв (чтобы нельзя было ввести буквы) и ограничить вводимые числа до одного символа. var a, b, c : Byte ; Begin ReadLn (a) ; ReadLn (b) ; ReadLn (c) ; end.
Добрый день, Константин! 1) для ввода одного символа (символа числа) используй ReadKey из модуля CRT. 2) ограничение ввода с ее же помощью. Естественно, что если захочешь вводить "-" или числа типа Real, то логика становится чуть сложнее. Если нужно, то писал когда-то
Приложение: Ответ отправлен: 08.06.2003, 17:54 Отправитель: Bill Отвечает Tibor
Здравствуйте, Константин! то о чём ты говориш, можно зделать с помощью функции ReadKey примерно так: uses crt; var ch : char; begin ch := ReadKey; case ch of #48..#57:write(ch); else exit end; end. Ответ отправлен: 08.06.2003, 19:22 Отправитель: Tibor Отвечает --- Нет данных ---
Добрый день, Константин! Да можно, для этого, необходимо задать рабочую область командой window таким образом чтобы там умещалось то кол-во символов, которое вам нужно. После выполнения команды readln - проверять что введено (чтобы программа не вылетала при вводе данных разного типа надо отключить проверку ввода компилятором) и если введено не то что надо, либо не устраивает длина просто считать еще раз и т.д. На экроане это будет выглядить красиво без каких любо ошибок и т.д.
Ответ отправлен: 07.06.2003, 23:24 Отправитель: --- Нет данных --- Отвечает Zensor
Добрый день, Константин! Используй h:=Readkey, где h:char; (см. придложение)
Приложение: Ответ отправлен: 08.06.2003, 06:42 Отправитель: Zensor Отвечает _vt
Приветствую Вас, Константин! Пример:
Приложение: Ответ отправлен: 08.06.2003, 17:56 Отправитель: _vt Отвечает Tancho
Добрый день, Константин! Ну да можно! Пользуйся оператороми ReadKey и case. Читай вводимый символ и проверяй его ASCII код - отвечает ли твой требования. Ответ отправлен: 09.06.2003, 21:33 Отправитель: Tancho Отвечает Дмитрий
Здравствуйте, Константин! Выход: не использовать стандартные процедуры read и readln. Просто опрашивайте клавиатуру на предмет нажатия нужных клавиш и добавляйте эти символы в строку. Потом можно будет строку перевести в число. Удачи!
Ответ отправлен: 09.06.2003, 13:40 Отправитель: Дмитрий Отвечает Dark_Lord
Приветствую Вас, Константин! var a:byte; s:string; k:byte; label 1; begin 1: readln(s); val(s,a,k); if k<>0 goto 1 end. Ответ отправлен: 08.06.2003, 13:04 Отправитель: Dark_Lord Отвечает vitya
Доброе время суток, Константин! Например, ты можешь вводить строчки, а анализировать потом только первый символ. Или же, что проще - просто вызывать функцию readkey, которая возвращает один символ. Ответ отправлен: 08.06.2003, 12:02 Отправитель: vitya Отвечает Tigran K. Kalaidjian
Здравствуйте, Константин! Можно сделать ввод символа с помощью ассемблерных вставок. Без эха(int21hAH=08h). И контролировать всё, что вводится. Если вводится "запретный" символ, то игнорировать его и не выводить на экран. В приложении - программа, которая не "воспринимает" ничего, кроме цифр. Если нужно подробнее - пишите на мыло.
Приложение: Ответ отправлен: 09.06.2003, 11:13 Отправитель: Tigran K. Kalaidjian Отвечает X-RayMan
Здравствуйте, Константин! Что-то я не понял. Это тебе надо ввести число от 0 до 9? Если да то смотри приложение. Можно ввести только одну цифру от 0 до 9.
Приложение: Ответ отправлен: 08.06.2003, 01:14 Отправитель: X-RayMan
Вопрос № 280
Здравствуйте Tibor ! Извините, я не совсем понял, как этим пользоваться. Как мне кажется прога работает так : Прога создает тип TScreen, который состоит из двух массивов. В них записывается экран посимвольно. А потом, когда это понадобится, вызываются символы из массивов и отображаются на экране. Если я неправильно понял, поправьте и объясните как этим пользоваться.
>Здравствуйте Tibor ! >Извините, я не совсем понял, как этим пользоваться. >Как мне кажется прога работает так : >Прога создает тип TScreen, который состоит из двух массивов. В них записывается экран посимвольно. >А потом, когда это понадобится, вызываются символы из массивов и отображаются на экране. >Если я неправильно понял, поправьте и объясните как этим пользоваться. не совсем правильно ты понял, массив является прямой ссылкой на адрес в памяти($B800:0000), формат в котором храняться данные: первый байт это символ а второй это атрибут этого символа просто ты можеш сделать прокрутку посредством смещения. допустим у тебя есть несколько переменных этого типа: var Screen : TScreen absolute $B800:$0000; NextS : Tscreen absolute $B800:$00A0; Save : TScreen; переменная Screen есть абсолютная ссылка на адрес следующая
NextS это ссылка на тотже адрес только со смещением в 160 байт тобиш смещение на строку, таким образом если ты приравняеш их Screen := NextS то получиш на экране смещение на одну строку, а если предварительно сохранить Save := Screen то потом можно будет вернуть эту строку. Вот тебе и скролинг :) Удачи. Ответ отправлен: 08.06.2003, 19:23 Отправитель: Tibor
Вопрос № 282
Здравствуйте ,Tibor. Вы просили оставить мыло- fil_fm@mail.ru мой прошлое письмо было таким: hello ,Tibor. В своём ответе вы упомянули книгу Зубкова и сказали что отошлёте если надо. я заинтересовался этой книгой и прошу её отослать. Очень благодарен за ответ ,но кроме программирования LPT хотелось бы знать и железную часть, а именно куда подключать исполнительные элементы! good luck.
Ушло мылом. Ответ отправлен: 08.06.2003, 19:22 Отправитель: Tibor
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.