IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Форматирование ввода-вывода, как ограничить пользователя
сообщение
Сообщение #1


Гость






Кто знает как можно ограничить пользователя при вводе данных - я имею ввиду есливводимое данное должно быть целочисленное -чтобы он ... не мог
там запятую или точку ввести - чтоб она у него не печаталась а токмо
цифры от 0...9 и длинну скажем только 4 символа
Я такую штуку наблюдал в калькуляторе винды - там буквы не печатаются
Заранее спасибо

Сообщение отредактировано: Rishat -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
чтобы он *** не мог

А ругаться зачем? Советую изменить сообщение, а то модератор увидит и ...
----
Ограничить можно, только надо вводить данные не с помощью Read а написать свою процедуру.
ОБЩАЯ СХЕМА:
1 считать из буфера символ нажатой клавиши.
2 проверьть его ASCII код
3 в зависимости от того, правильно ли введены данные, отобразить на экран (эхо)
4 записать данные
5 перейти на 1.
(в пункте 5 я написал перейти- это не значит использовать GOTO, это просто для наглядности. )


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


могу дать на асме =)


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


А есть еще один способ (экзотический).
Пусть вводит юзер, что хочет, а программа должна иметь обработчик ошибок исполнения (Runtime Error). Если юзер ввел вместо 0 (ноль) О (буква О) , то
произойдет ошибка, а обработчик ошибок вернет программу на точку ввода переменной. Подобный способ подробно описан в книге Turbo Pascal Фаронова.
----
Мне больше нравится этот способ, т.к. используя обработчик ошибок мы сразу предупреждаем все ошибки.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


И опять все пошли в дебри...
Господа, не надо усложнять - асм, буфер, обработчики...
Хорошо елси Rishat имеет представление об этом, а если нет?

Начинайте с самого простого и доступного - READKEY пусть "поюзает".



P.S.: Oleg_Z:
Цитата
а то модератор увидит и ...

:D (глаз за глаз) smile.gif


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Хм... =) ты прав
что то я совсем заассемблился ;)


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Код

uses crt;
function reading:string;{Читает строку из четырёх цифр}
var i:byte;
   ch:char;
   str:string[4];
begin
clrscr;
i:=0;
str:='';
repeat
ch:=readkey;
if (ord(ch)>=48) and (ord(ch)<=58) then
    begin
    str:=str+ch;
    inc(i);
    write(ch);
    end;
until (i=4);
reading:=str;
end;

begin
write(' vveli ',reading);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


А мне вот, что в голову пришло:
более простой способ, чем юзанье readkey - это вводить все в строку!
Ведь в строку можно ввести все, что угодно буз ошбки,
а если надо перевестив число, то есть процедура val.
По моему это самый простой метод!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






</span><span style='font-family:arial'>Большое Спасибо всем особливо Атосу и
Олегу -вот что я получил в результате
Код
program idea2;
uses crt;
var
 a,b:integer;
 r:integer;
function reading(var r:integer):string;
var i:byte;
  ch:char;
  str:string[4];
begin
i:=0;
str:='';
repeat
ch:=readkey;
if (ord(ch)>=45) and (ord(ch)<=58) then
   begin
   str:=str+ch;
   i:=length(str);
   write(ch);
   end;
until (i=4);
writeln;
val(str,r,b);
end;
begin
clrscr;
write(' vvedi chislo');
reading(r);
writeln;
writeln('vi vveli',r);
readln;
end.


Сообщение отредактировано: Rishat -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


пожалуйста возьмите в тег [ code] -только без пробула


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.09.2020 3:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name