BrunoJunior Posted April 5, 2024 at 10:39 AM Report #632967 Posted April 5, 2024 at 10:39 AM 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 nunopicado Posted April 5, 2024 at 11:00 AM Solution Report #632968 Posted April 5, 2024 at 11:00 AM 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. 1 Report "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.
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