Ir para o conteúdo
owny

Variáveis

Mensagens Recomendadas

owny    0
owny

Boas noites,

Tenho uma duvida e não deve ser muito difícil mas não consigo descobrir.

Numa das partes do programa peço ao utilizador paradefenir valores para 2 variáveis. mas quando o utilizador introduz uma letra o programa passa-se cm é óbvio... como posso definir que o utilizador só pode introduzir números?

Este é o código que tenho:

while (Z1<=0)
{
printf("ZONA 1: ");
scanf("%d", &Z1);
}

while (Z2<=0)
{
printf("ZONA 2: ");
scanf("%d", &Z2);
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Testa o valor devolvido pelo scanf().

E mete o teu código dentro dum loop.

O scanf() devolve quantos 'assigns' fez. Se fez 0 assigns alguma coisa está mal. Se fez 1 assign, em princípio está tudo bem ... mas o utilizador pode ter escrito "42c" e não tens maneira de testar isso só com o scanf().

if (scanf("%d", &Z1) != 1) /* oops */;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg
Existe outra forma sem ser scanf?

Podes usar fgets() e tratar a string caracter a caracter.

#include <ctype.h>
#include <stdio.h>
/* ... */
char buf[100];
int k;

if (fgets(buf, sizeof buf, stdin) == NULL) /* erro */;
/* apagar o ENTER final */
if (buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0';
k = 0;
while (buf[k]) {
   if (!isdigit((unsigned char)buf[k])) {
     /* caracter invalido */
   }
   k++;
}

fazer reset á variável

Para quê?

Se já não precisas mais da variável não a uses mais.

Se precisas da variável outra vez, mas com outro valor qualquer, mete lá o valor que precisas.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade