• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lammu

Menu corre bem mas tem pequenos bugs

3 mensagens neste tópico

Bem pessoal venho pedir ajuda o programa corre bem so k tens pekenos bugs k eu nao sei resolver se alguem me ajudar agradecia ca ta o programa. ao escolher a opcao 2 k e acresentar nomes idade e numero corre bem. a segunda vez passa logo po nome

program lammu;
uses crt;
const
   opcoes = ['n','s','S','N'];
   sim = ['s','S'];
   nao = ['n','N'];
var alunos: Text;
procedure ficheiro;
var op:char;
begin
  Clrscr;
  op:='z';
  Repeat
    Gotoxy(20,12);
    Write('Quer continuar? (s/n)');
    Read(op);
  until op in opcoes;
  if op in sim then
  begin
    Rewrite(alunos);
    Close(alunos);
    Clrscr;
    Gotoxy(20,12);
    Write('Opera‡Æo bem sucedida.');
    Readln;
    Readln;
  end
  else
  begin
    Gotoxy(20,12);
    Write('Opera‡Æo mal sucedida.');
    Readln;
    Readln;
  end;

end;
procedure novo;
var op:char;
    st,n,nome,id,aux:string;
    idade:integer;
begin
  Repeat
    Clrscr;
    Append(alunos);
    Gotoxy(5,5);
    Write('N£mero? ');
    Gotoxy(5,7);
    Write('Nome? ');
    Gotoxy(5,9);
    Write('Idade? ');
    Gotoxy(13,5);
    Readln(n);
    Gotoxy(13,7);
    Readln(nome);
    Gotoxy(13,9);
    Readln(idade);
    Str(idade,id);
    st:=n+nome+id;
    Writeln(alunos, st);
    Gotoxy(5,15);
    Write('Continuar? (s/n)');
    Gotoxy(22,15);
    Read(op);
  until op in nao;
  Close(alunos);
end;
procedure listar;
var linha,nr,nm,ida:string;
    l:integer;
begin
  clrscr;
  l:=4;
  reset(alunos);
  while not Eof(alunos) do
  begin
    ReadLn(alunos, Linha);
    nr:=copy(linha,1,2);
    nm:=copy(linha,3,20);
    ida:=copy(linha,23,2);
    Gotoxy(5,l);
    Write(nr);
    Gotoxy(8,l);
    Write(nm);
    Gotoxy(30,l);
    Write(ida);
    l:=l+1;
  end;
  repeat until keypressed;
end;
procedure menu;
var op:integer;
begin
  Clrscr;
  Repeat
    Clrscr;
    Gotoxy(5,5);
    Write('1 - Novo ficheiro');
    Gotoxy(5,7);
    Write('2 - Acrescentar dados');
    Gotoxy(5,9);
    Write('3 - Listar');
    Gotoxy(5,11);
    Write('0 - Sair');
    Gotoxy(5,15);
    Write('Qual a tua op‡Æo? ');
    Readln(op);
    case op of
      1: Ficheiro;
      2: Novo;
      3: Listar;
    end;
  until op=0;
end;
begin
  Assign(alunos, 'c:\10e\alunos.dat');
  Menu;
end.
 

Quando colocares código utiliza a função GeShi e seleciona o respectivo código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Bem vindo ao fórum  ;)

Ao escreveres uma mensagem tens a opção de inserir o código pelo GeSHi, de forma a ficar mais legivel.

begin
    write('exemplo');
    readln;
end.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi, antes de mais vindo ao fórum :biggrin:

Quanto à problema k dizes k acontece não vejo qual a razão. Axo k o código ta bem feito e tem uma boa estrutura, no entanto vou te dar uma sugestão e perguntar umas cenas.

Porquê k escreves 2x readln?

    Write('Opera‡Æo bem sucedida.');
    Readln;
    Readln;
   (...)
    Write('Opera‡Æo mal sucedida.');
    Readln;
    Readln;
  end;

Sugiro k devias avisar o utilizador (tbm k deves ser so tu k utilizas o programa, mas pa ficar + completo) para o máx. de caracteres do nome, pois cm fizeste:

    ReadLn(alunos, Linha);
    nr:=copy(linha,1,2);
    nm:=copy(linha,3,20);
    ida:=copy(linha,23,2);

o utilizador pode introduzir mais k 20 caracteres e assim vai interferir com a leitura da idade, pois se tal acontecer vai aparecer caracteres na posição 23 e 24 da string -> para isso, ao declarar a variável podias por nome:string[20].

Só mais uma coisa, se introduzires menos k 20 caracteres no nome consegues ler a idade?

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora