Мне нужно реализовать пароль типа "скрытая строка", т.е. при вводе очередного символа на экране отображается значёк "*", который скрывается очередной символ.
Вот мой код:
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© = 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.
Сначала проверяем, не нажат ли Enter, и только если нет - добавляем к строке символ (вместо Concat можно пользоваться обычным "+", кстати)...
while(k=1) doУ тебя же сравнивались строки "password" и "password#13". Чтобы ловить такие вещи - делай:
begin
c:=readkey;
if (ord© = 13) then k := 0
else begin
k:=1;
write('*');
s:=concat(s,c);
end;
end;
writeln;, лишние пробелы и символы перевода строки очень четко отслеживаются.
writeln('|'+key+'|');
writeln('|'+s+'|');
writeln;
while(k=1) doУ тебя же сравнивались строки "password" и "password#13". Чтобы ловить такие вещи - делай:
begin
c:=readkey;
if (ord© = 13) then k := 0
else begin
k:=1;
write('*');
s:=concat(s,c);
end;
end;
writeln;, лишние пробелы и символы перевода строки очень четко отслеживаются.
writeln('|'+key+'|');
writeln('|'+s+'|');
writeln;