Jump to content

Não consigo usar o comando Read no meu Char


Go to solution Solved by nunopicado,

Recommended Posts

Posted

Estou a tentar usar o read(); na minha variável de tipo Char, porém o programa ignora esse comando, mas quando uso na variável de tipo Int o programa age normalmente.

Program Restaurante;
Uses Crt;

Var

    Num_Pedidos: Integer;
    Registro_Conta: Real;
    Entrada, Nova_Entrada, Pedidos_Entrada: Char;

    Begin

        WriteLn('============================');
        WriteLn('Restaurante (Max 5 pessoas)');
        WriteLn('============================');
        WriteLn;
    
        WriteLn;
        WriteLn('Boa tarde, seja bem vindo');
        WriteLn;
        Write('Quantas pessoas iram comer? ');
        Read(Num_Pedidos);
        WriteLn;

        If(Num_Pedidos > 5)
            Then
                Write('Pedimos desculpa, mas o máximo neste momento é 5.')

        Else
            Begin
                ClrScr;
                WriteLn('Muito bem, iremos entregar o Menu.');
                WriteLn;
                Delay(1000);
                WriteLn('Pedido 1');
                WriteLn;
                WriteLn('======================');
                WriteLn('MENU DO RESTAURANTE');
                WriteLn('======================');
                WriteLn;
                WriteLn('ENTRADAS');
                WriteLn;
                WriteLn('(A) Sopa de Legumes- 2$');
                WriteLn;
                WriteLn('(B) Camarão- 8$');
                WriteLn;
                WriteLn('(C) Enchidos- 7$');
                WriteLn;
                WriteLn('(D) Pão c/Alho- 3$');
                WriteLn;
                WriteLn('(E) Creme de Marisco- 4$');
                WriteLn;
                WriteLn('(F) Salada- 3$');
                WriteLn;
                WriteLn('(G) Pastéis de Bacalhau- 3.50$');
                WriteLn;
                WriteLn;
                Write('Vai desejar alguma entrada? (Y/y,N/n) ');
                Read(Entrada);
            End;

    End.

 

BrunoJnr.

  • Solution
Posted

Isso acontece porque quando estás a ler uma variável do tipo char, a consola não diz ao comando quando terminou o input.
Quando lês um integer, ao dares enter depois de indicares o valor ele saber que o enter, que é um caracter #13, não pode ser um integer, e portanto, sabe que terminou a inserção.
No char não é assim, porque #13 é também ele um char.

Felizmente é fácil resolveres isso. Deixa de usar o read, passa a usar o readln. Assim ele saberá quando ler o #13 que é uma mudança de linha, que é o fim de valor que o readln está à espera. o read é um comando mais indicado para leitura de outras fontes, que não a consola (teclado).

Em alternativa, caso o compilador que estás a usar suporte este comando, podes substituir o read por um readkey.
O readkey permite ler um único caracter, o que significa que ele irá retornar o resultado ao sistema assim que uma (qualquer) tecla for pressionada.
É mais adequado para usar num menu como o que tens aí, pois significa que o utilizador não precisa indicar a letra e depois pressionar no enter. Assim que marca a letra, a opção é lida e aceite.

Ficaria algo tipo:
 

...
  
                WriteLn;
                WriteLn('(G) Pastéis de Bacalhau- 3.50$');
                WriteLn;
                WriteLn;
                Write('Vai desejar alguma entrada? (Y/y,N/n) ');
                Entrada := ReadKey;

Nem todos os compiladores de pascal suportam isto (apenas os bons), por isso convém testar se ele reconhece o comando.

  • Vote 1

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.