Помощь - Поиск - Пользователи - Календарь
Полная версия: Пароль: скрытая строка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rocket
Мне нужно реализовать пароль типа "скрытая строка", т.е. при вводе очередного символа на экране отображается значёк "*", который скрывается очередной символ.
Вот мой код:

program pass;
uses crt;

var    s: string;
	    i: integer;
	     c: char;
       k: integer;
       key: string;
		s1,s2:string;

function ToRus(s: string): string;
var p: byte;
begin
  for p := 1 to length(s) do
  case s[p] of
    'А'..'п': dec (s[p], 64);
    'р'..'я': dec (s[p], 16);
  end;
     ToRus:=s;

end;

begin

writeln(ToRus('Введите пароль:'));

k:=1;
key:='password';

while(k=1) do
begin
c:=readkey;
	s:=concat(s,c);
	if (ord(c) = 13) then k:=0
			   else
             begin
             k:=1;
             write('*');
             end;
end;

writeln;
writeln(key);
writeln(s);
writeln;


if s<>key then
	writeln(ToRus('Доступ запрещен.'))

			else
			writeln(ToRus('Доступ разрешен.'));

readkey;
clrScr;
end.


Почему не выполняется условие равенства? Я не правильно формирую строку s?
volvo
Сначала проверяем, не нажат ли Enter, и только если нет - добавляем к строке символ (вместо Concat можно пользоваться обычным "+", кстати)...
while(k=1) do
begin
  c:=readkey;

  if (ord(c) = 13) then k := 0
  else begin
    k:=1;
    write('*');
    s:=concat(s,c);
  end;
end;
У тебя же сравнивались строки "password" и "password#13". Чтобы ловить такие вещи - делай:
writeln;
writeln('|'+key+'|');
writeln('|'+s+'|');
writeln;
, лишние пробелы и символы перевода строки очень четко отслеживаются.
Rocket
Цитата(volvo @ 5.12.2009 1:59) *

Сначала проверяем, не нажат ли Enter, и только если нет - добавляем к строке символ (вместо Concat можно пользоваться обычным "+", кстати)...
while(k=1) do
begin
  c:=readkey;

  if (ord(c) = 13) then k := 0
  else begin
    k:=1;
    write('*');
    s:=concat(s,c);
  end;
end;
У тебя же сравнивались строки "password" и "password#13". Чтобы ловить такие вещи - делай:
writeln;
writeln('|'+key+'|');
writeln('|'+s+'|');
writeln;
, лишние пробелы и символы перевода строки очень четко отслеживаются.

Спасибо большое за помощь и за совет : )
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.