【发布时间】:2021-04-05 18:54:50
【问题描述】:
我使用 FPC 在 pascal 中构建了一个程序,但之后我安装了 lazarus。所以现在我正在 Lazarus 中编辑同样的 pascal 程序。 在这种类型的记录数组中插入、修改和列出:姓名、姓氏和电话非常有效。 但是在这个修改过程中,读取命令对我不起作用。 但是读取命令在我的删除过程中运行良好。
主要问题: **这 3 个读取命令不起作用,所以我修改为 readln,它为我修复了它,现在每个人都读取我的输入,但仅使用 readln,但不使用 read。 **
但是为什么呢?
gotoxy(24,8);
read(modificar_nome);
gotoxy(24,9);
read(modificar_sobrenome);
gotoxy(24,10);
read(modificar_telefone);
完成程序
//---------------------------------------
// MODIFICAR escolha
//---------------------------------------
procedure modificar_pessoa(var pessoa: type_pessoas);
var i,achou: integer;
var buscar_pessoa, modificar_nome, modificar_sobrenome, modificar_telefone: string;
begin
clrscr;
writeln('****************************************************************************************');
writeln('* Modificar pessoa *');
writeln('****************************************************************************************');
writeln('* Nome: *');
writeln('****************************************************************************************');
gotoxy(9,4); readln(buscar_pessoa);
for i:=0 to length(pessoa)-1 do
begin
if (pessoa[i].primeiro_nome = buscar_pessoa) then
begin
achou := 1;
break;
end;
end;
if achou = 1 then
begin
writeln('****************************************************************************************');
writeln('* Preencher so o que deseja modificar (ou ENTER para ignorar): *');
writeln('****************************************************************************************');
writeln('* Novo Primeiro Nome? *');
writeln('* Novo Sobrenome? *');
writeln('* Novo Telefone? *');
writeln('****************************************************************************************');
gotoxy(24,8);
read(modificar_nome); // not waiting for my input ???????????
gotoxy(24,9);
read(modificar_sobrenome);
gotoxy(24,10);
read(modificar_telefone);
if modificar_nome <> '' then
pessoa[i].primeiro_nome := modificar_nome;
if modificar_sobrenome <> '' then
pessoa[i].ultimo_nome := modificar_sobrenome;
if modificar_telefone <> '' then
pessoa[i].telefone := modificar_telefone;
gotoxy(1,13);
writeln;
writeln('Pessoa ''', buscar_pessoa, ''' modificada com sucesso!');
end
else
begin
gotoxy(1,13);
writeln;
writeln('ERRO: Pessoa ''', buscar_pessoa, ''' não foi localizada!');
end;
writeln;
writeln('Pressione qualquer tecla para retornar ao menu...'); ReadAnyKey;
end;
有趣的是这个删除(排除)人员的其他程序,读取命令工作正常并等待我的输入
//---------------------------------------
// EXCLUIR escolha
//---------------------------------------
procedure excluir_pessoa(var pessoa: type_pessoas);
var i,achou: integer;
var del_pessoa: string;
begin
clrscr;
writeln('****************************************************************************************');
writeln('* Excluir pessoa *');
writeln('****************************************************************************************');
writeln('* Nome: *');
writeln('****************************************************************************************');
gotoxy(9,4); read(del_pessoa);
for i:=0 to length(pessoa)-1 do
begin
if (pessoa[i].primeiro_nome = del_pessoa) then
begin
achou := 1;
pessoa[i].primeiro_nome := '';
pessoa[i].ultimo_nome := '';
pessoa[i].telefone := '';
break;
end;
end;
gotoxy(1,6);
if achou = 1 then
writeln('Pessoa ''', del_pessoa, ''' excluida com sucesso!')
else
writeln('ERRO: Pessoa ''', del_pessoa, ''' nao foi localizada!');
writeln;
writeln('Pressione qualquer tecla para retornar ao menu...'); ReadAnyKey;
end;
【问题讨论】:
-
我建议你阅读这个问题:stackoverflow.com/q/48099891/2663863 和@TomBrunberg 对此的回答。
-
非常感谢。你知道我是否可以使用 read(something) 并清除缓冲区中的 eol 以及如何?我在论坛上看到了一些东西,但是在尝试清除缓冲区时它对我不起作用。但无论如何,我可以使用 gotoxy(x,y) 通过 readln 转到我想要下一个输入的位置。即使没有使用太多的 gotoxy,因为我意识到处理速度很慢......
-
如何回答?请回答我的朋友关闭帖子?
标签: pascal