Faustino 0 Posted June 12, 2019 Report Share Posted June 12, 2019 Fiz este programa em pascal: Program Pzim ; type pessoa=record nome:string; idade:integer; end; var f:file of pessoa; p:pessoa; x:integer; Begin assign(f,'pessoa.dat'); {$I-} reset(f); if ioresult<>0 then rewrite(f); {$I+} repeat write('Insira o nome: '); readln(p.nome); if upcase(p.nome)<>'FIM' then begin write('Idade: '); readln(p.idade); write(f,p); end; writeln; until upcase(p.nome)='FIM'; close(f); reset(f); clrscr; gotoxy(1,1); write('Nome'); gotoxy(35,1); write('Idade'); x:=3; while not eof(f) do begin read(f,p); gotoxy(1,x); write(p.nome); gotoxy(35,x); write(p.idade); x:=x+1; end; close(f); End. Entretanto quando é para listar os dados da lista, alem de o primeiro de sobrepor ao anterior, ele apenas mostra 5 dos dados presentes no ficheiro. Conseguem ajudar? Feito no Pascalzim 6.0.3 Link to post Share on other sites
nunopicado 1,251 Posted June 12, 2019 Report Share Posted June 12, 2019 Não consegui reproduzir o erro... Aqui esse código funciona correctamente sem qualquer alteração. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to post Share on other sites
BHAMF 2 Posted June 14, 2019 Report Share Posted June 14, 2019 Tente mudar ali, quando na leitura, em vez de read, use readln... e nos diga o resultado. Agora, BHAMF disse: Tente mudar ali, quando na leitura, em vez de read, use readln... e nos diga o resultado. e coloque writeln; embaixo do write. Brenio Hallison A.M. Filho Link to post Share on other sites
Faustino 0 Posted June 14, 2019 Author Report Share Posted June 14, 2019 9 horas atrás, BHAMF disse: Tente mudar ali, quando na leitura, em vez de read, use readln... e nos diga o resultado. e coloque writeln; embaixo do write. Em 12/06/2019 às 18:17, Faustino disse: Fiz este programa em pascal: Program Pzim ; type pessoa=record nome:string; idade:integer; end; var f:file of pessoa; p:pessoa; x:integer; Begin assign(f,'pessoa.dat'); {$I-} reset(f); if ioresult<>0 then rewrite(f); {$I+} repeat write('Insira o nome: '); readln(p.nome); if upcase(p.nome)<>'FIM' then begin write('Idade: '); readln(p.idade); write(f,p); end; writeln; until upcase(p.nome)='FIM'; close(f); reset(f); clrscr; gotoxy(1,1); write('Nome'); gotoxy(35,1); write('Idade'); x:=3; while not eof(f) do begin read(f,p); gotoxy(1,x); write(p.nome); gotoxy(35,x); write(p.idade); x:=x+1; end; close(f); End. Entretanto quando é para listar os dados da lista, alem de o primeiro de sobrepor ao anterior, ele apenas mostra 5 dos dados presentes no ficheiro. Conseguem ajudar? Feito no Pascalzim 6.0.3 Já tentei mudar os write e os read para writeln e readln e o erro continua o mesmo: Insiro por exemplo pedro, joao e eduardo, clico enter para listar e ele lista os 3 nomes, de seguida listo mais dois nomes, ricardo e gonçalo, e o que acontece quando vai listar é que, so aparece os dois que acabei de inserir e o ultimo que inseri da outra vez. Link to post Share on other sites
passarito 58 Posted June 14, 2019 Report Share Posted June 14, 2019 O que me dá a ideia é que ele está sempre a criar o ficheiro de dados. Faz o seguinte para testares: {$I-} reset(f); if ioresult<>0 then begin rewrite(f); writeln('Criei ficheiro'); end else begin writeln('Abri ficheiro'); end; {$I+} Assim vais conseguir saber se o ficheiro foi aberto ou criado de novo Link to post Share on other sites
antseq 91 Posted June 14, 2019 Report Share Posted June 14, 2019 Viva, Se queres começar sempre com um ficheiro (registos) vazio, penso que só precisas disto: {$I-} rewrite(f); {$I+} Se queres manter os registos na sessão anterior, acrescenta o "Seek(f,Filesize(f));" {$I-} reset(f); if ioresult<>0 then rewrite(f); Seek(f,Filesize(f)); {$I+} Cps, 1 Report Link to post Share on other sites
passarito 58 Posted June 14, 2019 Report Share Posted June 14, 2019 1 hora atrás, antseq disse: Viva, Se queres começar sempre com um ficheiro (registos) vazio, penso que só precisas disto: {$I-} rewrite(f); {$I+} Se queres manter os registos na sessão anterior, acrescenta o "Seek(f,Filesize(f));" {$I-} reset(f); if ioresult<>0 then rewrite(f); Seek(f,Filesize(f)); {$I+} Cps, Xiiiii , esqueci-me do seek... também já lá vão muitos anos que não trabalho com o Pascal. Good Work @antseq Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now