Ir ao conteúdo

Posts recomendados

Postado

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
  • Membro VIP
Postado

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
  • 2 semanas depois...
Postado

 

@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.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!