• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

owny

Variáveis

5 mensagens neste tópico

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);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 */;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existe outra forma sem ser scanf?

A unica coisa que preciso é que o utilizador só coloque numeros e nada de letras...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra questão:

- Quando chego ao fim de uma instrução e quero fazer reset á variável... como faço issO?

Meto:

variavel = variavel?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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.

0

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