Ir para conteúdo
Fórum Script Brasil
  • 0

validacao de um numero inteiro inserido pelo utilizador


Zekafonso

Pergunta

Boas a todos... sou novo nestas coisas da programacao e estou com uma dúvida. Preciso de validar uma entrada feita pelo utilizador. essa entrada tem de ser inteiro. não se pode aceitar o que quer que seja que não seja inteiro. essa variavel neste caso é a x. uma solucao encontrada era a seguinte:

 

//Declaration and initialization of the variables

    int  aux, flag;

    float x

    // Input of the x index (Ax paper) and control of it (integer)

    flag =0;


while (flag==0)

{
    printf ("What's the index of the paper? Ax [0..1000]");

    scanf  ("%d", &x);

    aux = x;

    if (aux==x)

        flag =1;

    else printf ("The index must be an integer");

}
 

isto foi uma solucao retirada de uma outra pagina da qual não me recordo e adaptada por mim mas isto não está a a correr nada bem. o objectivo é que até o numero x ser integer o programa fique a pedir o x.

 

Será que alguma alma caridosa me pode ajudar? Desde já obrigado! 

 

PS: comecei a programar há 2 semanas em c por isso tenho que acompanhar o ritmo das aulas. isto significa que não posso ter solucoes muito avancadas já que ainda não as consigo entender!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Olá, fique tranquilo pois validação de dados é uma tarefa chata e difícil até para os que os mais experientes, portanto, não desanime.

abaixo segue um código comentado, e fique a vontade para esclarecer qualquer dúvida, pois é muito importante você entender cada linha de programação, pois não faz sentido resolver um exercício sem entendê-lo.

#include <stdio.h> //biblioteca para printf

int main(){
	// Entrada do usuário de entrada - espero que um número
	// Temp utilizado para recolher lixo caracteres
	// status que o usuário insira um número?
	int entrada, temp, status;

	printf ( "Por favor insira um número:"); //imprimi a mensagem para o usuario digitar um numero.
	status = scanf ( "%d", &entrada);
	
	while (status!= 1) { //isso vai repetir enquanto status for diferente de um.
		while((temp=getchar()) != EOF && temp != '\n'); //evita que o laco caia no infinito quando o usuario digitar algo errado.
		printf ( "Entrada inválida ... por favor insira um número:");
		status = scanf ( "%d", &entrada); //pega o que o usuario digitou e atualiza a variavel status.
	} //fecha o while

	printf ( "O seu número é %d \ n", entrada);
	return 0;
} //fecha a função main 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Desde já obrigado, mas ainda não é isto que eu preciso. Junto existe um print screen do que este código faz. se repararem (no final do print) se entrar com um caracter (a neste caso) o prog continua a pedir uma entrada. Optimo!

 

O problema é quando se entra com 3.1 ou 3,1 o programa aceita como 3 em ambos os casos. o que eu necessito é que faca o mesmo que para a letra a: que mostre a msg de erro que a entrada não é válida. 

codigo.png

Editado por Zekafonso
Link para o comentário
Compartilhar em outros sites

  • 0

normal... o que está acontecendo é um cast interno, ou seja, ao entrar com um numero real o programa descarta a parte fracionaria e fica só com a decimal. Nesse caso acho que o que você poderia fazer é escanear em vez de um %d, escanear a um %f, e fazer algo como if( real%1==0 ){/*É um numero inteiro*/}else{/*É um numero real*/}. Obviamente real deveria ser um numero float ou double, depois de comprova-lo seria possível converter-lhe a um int novamente. É só uma ideia =)

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

  • 0
40 minutos atrás, vangodp disse:

normal... o que está acontecendo é um cast interno, ou seja, ao entrar com um numero real o programa descarta a parte fracionaria e fica só com a decimal. Nesse caso acho que o que você poderia fazer é escanear em vez de um %d, escanear a um %f, e fazer algo como if( real%1==0 ){/*É um numero inteiro*/}else{/*É um numero real*/}. Obviamente real deveria ser um numero float ou double, depois de comprova-lo seria possível converter-lhe a um int novamente. É só uma ideia =)

ok... agora já comeco a chegar mais perto... vou pensar nesta solucao e volto aqui mais tarde! obrigado!

 

Editado por Zekafonso
Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade se você digitar um número float, exemplo 3.1 isso seria simples, pois bastaria você trocar o tipo de entrada de int para float, observe o exemplo abaixo.

#include <stdio.h>
#include <stdlib.h>

int main(){
	// Entrada do usuário de entrada - espero que um número
	// Temp utilizado para recolher lixo caracteres
	// status que o usuário insira um número?
	int entrada, temp, status;

	float x, xTemp;
	printf ( "Por favor insira um número:"); //imprimi a mensagem para o usuario digitar um numero.
	status = scanf ( "%f", &x);
	if(status==1){
		entrada=(int)x;
		xTemp=(float)entrada;
		if( (x-xTemp)!=0 ){
			status=0;
		}
	}
	while (status!= 1) { //isso vai repetir enquanto status for diferente de um.
		while((temp=getchar()) != EOF && temp != '\n'); //evita que o laco caia no infinito quando o usuario digitar algo errado.
		printf ( "Entrada inválida ... por favor insira um número:");
		//status = scanf ( "%d", &entrada); //pega o que o usuario digitou e atualiza a variavel status.
			status = scanf ( "%f", &x);
		if(status==1){
			entrada=(int)x;
			xTemp=(float)entrada;
			if( (x-xTemp)!=0 ){
				status=0;
			}
		}
	} //fecha o while

	printf ( "O seu número é %d \ n", entrada);
	return 0;
} //fecha a função main 

Mas se você deseja pegar tudo que o usuário digitar e verificar se isso é um int, ai acho que seria mais simples usar uma biblioteca tipo a istringstream do c++, ela é bem interessante.

até mais.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...