Ir ao conteúdo
  • Cadastre-se

Pascal - fecha ao digitar algo errado


viniciusbmatos

Posts recomendados

Estou criando meus primeiros programas e estou com um problema. Exemplificando:

program nomedoprograma;
...
var x:integer;
...
Begin
writeln('Digite um numero inteiro:');
readln(x);
...
End.

(As reticências indicam que foram representados apenas alguns trechos)

Quando, no programa, digita-se o valor de x inteiro, acontece normalmente. Mas se digitar 3.5 ou abc o programa fecha. Como fazer, se preciso que o número seja inteiro? Um bom programa não deve travar se o usuário (final) digitar algo errado!

Obrigado a todos.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Estou criando meus primeiros programas e estou com um problema. Exemplificando:

program nomedoprograma;
...
var x:integer;
...
Begin
writeln('Digite um numero inteiro:');
readln(x);
...
End.

(As reticências indicam que foram representados apenas alguns trechos)

Quando, no programa, digita-se o valor de x inteiro, acontece normalmente. Mas se digitar 3.5 ou abc o programa fecha. Como fazer, se preciso que o número seja inteiro? Um bom programa não deve travar se o usuário (final) digitar algo errado!

Obrigado a todos.

Olá,

Tem duas formas (pode haver mais é claro)

1) Usando String para leitura

Desta forma você leria o valor, converteria para Integer... daí bastaria saber se a conversão deu certo ou não.

Para converter use o comando Val().

Esse comando tem 3 parâmetros.

a) Uma string que tem o valor

B) Um interger que vai receber o valor convertido (ou não, caso dê erro)

c) Um Word que receberá o código de status. (se for 0 que deu certo, se for outro número não deu)

ex.:

Program teste_VAL;

var
numString :String;
x :Integer;
code :Word;

BEGIN
.
ReadLN(numString);
val(numString,x,code);
if code <> 0 then {caso seja diferente de "0"}
begin
{aqui caso de erro na conversao}
end
else {caso seja "0"}
begin
{aqui caso de certo}
end;
.
.
END.

2) Outra forma seria usando "diretivas de compilação"

Basicamente "anularia o fechamento", ou seja, o erro poderia acontecer, entretanto o Pascal iria "ignorar"... mas esse recurso é um pouco mais avançado, sugiro que use o primeiro mesmo.

Boa sorte

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

Agradeço muito. Adaptei para entender melhor:

Program teste_VAL;
uses crt;
var
numString :String;
x :Integer;
code :Word;
label comeco;
BEGIN
comeco:
writeln('Digite algo:');
ReadLN(numString);
val(numString,x,code);
if code <> 0 then {caso seja diferente de "0"}
begin
writeln('N£mero incorreto.');
goto comeco;
end
else {caso seja "0"}
begin
writeln('Deu certo. Valor: ',x);
readkey;
goto comeco;
end;
END.

Ao digitar um número inteiro, como -8, aparece "Deu certo. Valor: -8.". Ao digitar letras ou símbolos, como abc, vem o texto "Número incorreto".

Agora meus aplicativos não vão mais fechar por um simples erro.

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!