Pascal 尝试验证文本文件中的字符时出现循环卡滞
我必须制作一个程序,从文本文件中读取一些“随机”的字母和数字字符串,并检查它们是否满足某些条件,从而使它们成为有效的密码 条件为:-正好有4位数字 -正好有8个字符 -至少有一个大写字母和一个小写字母 程序读取文件并输出有效密码的数量 这是文本文件的格式: “eR68G12a 91jY643ebjp eRty74kLh 24fG92 aj85gt32 dGb9357jKoup2”(单线) 守则: 'Pascal 尝试验证文本文件中的字符时出现循环卡滞,pascal,freepascal,Pascal,Freepascal,我必须制作一个程序,从文本文件中读取一些“随机”的字母和数字字符串,并检查它们是否满足某些条件,从而使它们成为有效的密码 条件为:-正好有4位数字 -正好有8个字符 -至少有一个大写字母和一个小写字母 程序读取文件并输出有效密码的数量 这是文本文件的格式: “eR68G12a 91jY643ebjp eRty74kLh 24fG92 aj85gt32 dGb9357jKoup2”(单线) 守则: ' 程序Ej23\u版本3; 变量 char1,char2:char; mayus,减号:布尔;//
程序Ej23\u版本3;
变量
char1,char2:char;
mayus,减号:布尔;//mayus和减号分别为大写和小写
cantDigitos、Cantcharacteres、contrasenasValidas:整数;
datos:文本;
开始
赋值(datos,'datos_guia3_ej23.txt');重置(datos);
contrasenasValidas:=0;
char1:='';
Read(datos,char2);
而不是eof(DATO)呢
开始
梅尤斯:=假;减:=假;腕趾:=0;角字符:=0;
如果是(char1='')和(char2''),那么//检查它是否是这个词的开头
开始
而不是eof(DATO)和(char2'')执行
开始
腕关节:=腕关节+1;
如果char2=UPCASE(char2),则//如果字符2等于字符2的大写版本,则字符2为大写
马尤斯:=真的
其他的
如果(字符2位于['0'..'9']),则
cantDigitos:=cantDigitos+1
其他的
减:=真;
如果是eof(datos),那么//当它到达文件末尾时,它还会读取并检查最后一个字符
如果char2=UPCASE(char2),则
马尤斯:=真的
其他的
如果(字符2位于['0'..'9']),则
cantDigitos:=cantDigitos+1
其他的
减:=真;
结束;
如果减号和mayus and(cantDigitos=4)和(cantCaracteres=8),则//如果满足所有条件,则密码有效,并将其添加到计数器中
contrasenasValidas:=contrasenasValidas+1;
char1:=char2;Read(datos,char2)//此时char2应该是一个空字符,因此它将该值传递给char1并读取下一个字符
终点
结束;
书面文件(contrasenasValidas);
结束。
但是当我运行它时,它只是停留在那里,只有提示滴答作响问题在于您读取文件的方式(一个字符接一个字符) 最好一次读完,然后逐个检查八个字符的所有序列
uses
SysUtils;
var
LFile: TextFile;
LStr, LSubStr: string;
LStartIndex: integer;
LExit: boolean;
begin
AssignFile(LFile, 'Datos_guia3_ej23.txt');
Reset(LFile);
ReadLn(LFile, LStr); // Get the whole line
LStartIndex := 1; // Search all 8 characters sequences, starting from the first character
LExit := FALSE;
repeat
LSubStr := Copy(LStr, LStartIndex, 8);
if Length(LSubStr) = 8 then
begin
// Here check other conditions
// ...
Inc(LStartIndex);
end else
LExit := TRUE;
until LExit;
CloseFile(LFile);
end.
使用调试器解决问题。我们不是调试器的替代者。
uses
SysUtils;
var
LFile: TextFile;
LStr, LSubStr: string;
LStartIndex: integer;
LExit: boolean;
begin
AssignFile(LFile, 'Datos_guia3_ej23.txt');
Reset(LFile);
ReadLn(LFile, LStr); // Get the whole line
LStartIndex := 1; // Search all 8 characters sequences, starting from the first character
LExit := FALSE;
repeat
LSubStr := Copy(LStr, LStartIndex, 8);
if Length(LSubStr) = 8 then
begin
// Here check other conditions
// ...
Inc(LStartIndex);
end else
LExit := TRUE;
until LExit;
CloseFile(LFile);
end.