Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Menu de Pascal sem retorno


Posts recomendados

Fala pessoal eu sou o Patch, durante meu programa de fim de ano de pascal eu me encontrei com um erro estranho no código, ele rodava o menu apenas uma vez e depois o mesmo saia do programa por razao nenhuma, e sim o meu código estava correto, o programa saia sem os requerimentos do until serem preenchidos segue o código a seguir:

Alguém me explica o por que do erro, eu comentei a parte que faltava pro código funcionar corretamente.

program trabestevan;
type
    ficha = record
    nome,Genero,cpf : string;
    idade,qtdEnd,qtdTel: integer;
    endereco:array [1..3] of string;
    telefone:array [1..3] of string;

end;
var

    Pessoa : array [1..100] of ficha;
    finish,sel,margem,escolha,Psel,qtdEnd,qtdTel : integer;
begin
margem:=0;
finish:=1; // SEM ESTA LINHA NO CODIGO O PROGRAMA  EXECUTAVA A OPCAO 1 E SAIA SOZINHO IGNORANDO O REPEAT AI EU COLOQUEI ISSO E RESOLVEU MAS POR QUE?
repeat
    writeln('Bem Vindo ao Programa de Agenda');
    writeln('Menu :');
    writeln('1 - Cadastrar Nova Pessoa');
    writeln('2 -Cadastrar Endereço Extra');
    writeln('0 - Sair do Programa');
    readln(sel);
    while (sel < 0) or (sel > 2) do
    begin
        writeln('Menu :');
        writeln('1 - Cadastrar Nova Pessoa');
        writeln('2 -Cadastrar Endereço Extra');
        writeln('0 - Sair do Programa');
        readln(sel);
    end;
    if (sel = 1) then
    begin
        margem:= margem + 1;
        writeln('Insira o Nome da nova Pessoa a ser Cadastrada :');
        readln(Pessoa[margem].nome);
        writeln('Insira o Endereço :');
        Pessoa[margem].qtdEnd:=1;
        qtdEnd:=1;
        qtdTel:=1;
        readln(Pessoa[margem].endereco[qtdEnd]);
        Pessoa[margem].qtdTel:=1;
        writeln('Insira o Telefone, "(xx) xxxxx-xxxx "');
        readln(Pessoa[margem].telefone[qtdTel]);
        writeln('Insira seu CPF, "xxx.xxx.xxx-xx"');
        readln(Pessoa[margem].cpf);
        writeln('Insira a Idade');
        readln(Pessoa[margem].idade);
        writeln('Selecione o Sexo');
        writeln('1- Masculino');
        writeln('2- Feminino');
        readln(escolha);
        while (escolha <=0) or (escolha > 2) do
        begin
            writeln('Selecione o Sexo');
            writeln('1- Masculino');
            writeln('2- Feminino');
            readln(escolha);
        end;
        if (escolha = 1) then
        begin
            Pessoa[margem].genero:= 'Masculino';
        end
        else
            if (escolha = 2) then
                begin
                    Pessoa[margem].genero:='Feminino';
                end;
    end
    else
        if (sel = 2) then
        begin
            writeln('Número de Pessoas Cadastradas: ',margem);
            writeln('Insira a Posição Numérica da pessoa que irá receber o Novo Endereço :');
            readln(Psel);
            while (Psel < 1) or (Psel > margem) do
            begin
                writeln('Numero não existe no vetor');
                writeln('Insira a Posição Numérica da pessoa que irá receber o Novo Endereço :');
                readln(Psel);
            end;
            qtdEnd:= Pessoa[Psel].qtdEnd;
            if (qtdEnd = 3) then
            begin
                writeln('Esta Pessoa já Possui o Máximo de Endereços no Servidor');
            end
            else
                if (qtdEnd < 3) then
                begin
                    qtdEnd:= qtdEnd + 1;
                    Pessoa[Psel].qtdEnd:= qtdEnd;
                    writeln('Insira o Novo Endereço');
                    readln(Pessoa[Psel].endereco[qtdEnd]);
                end;            
        end
    else
        if (sel = 3) then
        begin
            writeln('Insira o Numéro de Usuário que terá o Novo Telefone Adicionado a Conta');
            readln(Psel);
            while (Psel < 0) or (Psel > margem) do
            begin
                writeln('Pessoa Não consta em Nosso Vetor');
                writeln('Insira o Numéro de Usuário que terá o Novo Telefone Adicionado a Conta');
                readln(Psel);
            end;
            qtdTel:= Pessoa[Psel].qtdTel;
            if (qtdTel = 3) then
            begin
                writeln('Usuário Já Possui o Máximo de Telefones');
            end
            else
                if (qtdTel < 3) then
                begin
                    qtdTel:= qtdTel + 1;
                    Pessoa[Psel].qtdTel:= qtdTel;
                    writeln('Insira o Novo Número de Telefone');
                    readln(Pessoa[Psel].telefone[qtdTel]);
                end;
        end
        else
            if (sel = 0) then
            begin
                finish:=0;
            end;
    writeln('Pressione qualquer tecla pra continuar');
    readln();
    until (finish=0);
end.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Enrique Leandro, seja bem vindo ao Fórum do Clube do Hardware.
 

55 minutos atrás, Enrique Leandro disse:

Alguém me explica o por que do erro, eu comentei a parte que faltava pro código funcionar corretamente.

 

Vide:

56 minutos atrás, Enrique Leandro disse:

    readln(sel);
    while (sel < 0) or (sel > 2) do
    begin
        writeln('Menu :');
        writeln('1 - Cadastrar Nova Pessoa');
        writeln('2 -Cadastrar Endereço Extra');
        writeln('0 - Sair do Programa');
        readln(sel);

A mesma variável de controle no menu principal está sendo utilizada em menu interno...  ai ao utilizar o sair do menu interno, vai acabar saindo do repeat.

 

 

PS: passe esses if/else  dos menus para case, fica mais organizado.

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

 

@Enrique Leandro        o @Simon Viegas   tem razão sobre o uso dessa variável ,    e também a variável finish  que você declarou lá no inicio ela foi iniciada pelo sistema com valor zero,  com isso lá no final do repeat  essa variável estará com valor zero e com isso satisfaz a condição do repeat e ele sai do loop ,  por isso precisa colocar o valor finish=1 para que o loop se repita.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...