Dev - C++ - validacion nume c++

 
Vista:

validacion nume c++

Publicado por azureus2k (2 intervenciones) el 30/11/2007 01:32:37
buenas amigo tengo una pequeñna duda espero q alguien me pueda ayudar
tengo un programa cualquiera pero necesito validar q el ingreso de datos sea numero y no letra
estuve buscando pero no pude encontrar nada concreto ojala q alguien me ayude con un algoritmo xd

un ejemplo seria algo de este tipo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
printf ("rut:");
	scanf("%d",&clinica[i].rut);
 
	printf ("nombre:
");
	scanf ("%d",&clinica[i].nom);
 
	printf ("apellido:
");
	scanf("%s",&clinica[i].apellido);
	do{
	printf ("edad: ");
	scanf("%d",&clinica[i].edad);
	}while (clinica[i].edad < 3 || clinica[i].edad > 80 );
	printf ("especialidad 1/2/3 = ");
	scanf("%d",&clinica[i].especialidad);
 
	printf ("tipo atencion: 1/2/3 = ");
	scanf("%d",&clinica[i].tipo);
 
	if (clinica[i].tipo == 2)
	{printf ("nombre de ella:");
	scanf ("%s",&clinica[i].isapre);}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:validacion nume c++

Publicado por Elver (1 intervención) el 22/05/2008 06:04:13
puedes probar con los valores que devuelve la función scanf al hacer el escaneo de teclado escaneo desde teclado, es decir, si quieres evaluar un entero puedes hacer lo siguiente:

int variable;
.
.
.

do{
...instrucciones...
...
}while( scanf("%d",&variable) != 1 );

esto es, la función scanf te devuelve datos numericos de acuerda al tipo de dato y al número de datos que ingreses:

char escaneo;
int devolución;

.
.
.

devolucion = scanf("%c",&escaneo);

así

devolución =0 // esto es por ser un caracter

-o-o-o--o-o-o--o-o-oo

ahora bien

int escaneo;
int devolución;

.
.
.

devolucion = scanf("%d",&escaneo);

así

devolucion =1 // esto es por ser un entero

también

devolucion = scanf("%d %d %d ",&escaneo1, &escaneo2, &escaneo3);

así devolucion = 3 // esto es por que se reciben tres datos enteros
si alguno lllegase a no ser entero la condición no se cumple y volvera a repetirse el bucle

un detalle más,notese que en el formatoq ue le he proporcionado son tres numeros enteros separados cada uno con espacios, esto debe respetarse, es decir

si usted ingresa

1 2 3 // este ingreso será correcto

1 23 // este ingreso será incorrecto

12 3 // este ingreso será incorrecto

123 // este ingreso será incorrecto

Queda claroq eu debe respetarse el formato de escaneo

ejemplo:

scanf( "%d - %d - %d",&a,&b,&c );

un ingreso correcto será 3 - 6 - 70

espero le sirva esta información

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

-->lee todo como cadena y valida, aqui la funci

Publicado por AntonioG (28 intervenciones) el 28/09/2008 19:14:11
Hola azureus2k,

Primero, en tu codigo, cuando lees los campos de tu estructura, pues tienes varios errores, ya que por ejemplo lees una cadena con scanf con "%d" cuando deberia ser "%s".

Para lo de la validacion, pues igual y te conviene leer todo como cadena, y luego usar una funcion para ver si en esa cadena realemente ahy un numero, aca un ejemplo de como seria ese codigo:
http://foro_c.forogratis.es/foro/viewtopic.php?t=624

Ojala te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:validacion nume c++

Publicado por Steven Macìas (1 intervención) el 10/02/2009 00:09:55
Eso es o que me resulto para validar que ingrese solo letras en vez de numeros, pero lo contrario no o he logrado, lo estoy tratando, Espero te ayude e ejemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
while (op=='S'){
     do{
       do{
	 gotoxy(34,cont+11); printf("     ");
	 gotoxy(12,cont+11); printf("Ingrese Jugador # %i:                ",cont);
	 gotoxy(34,cont+11); gets(nom);
       }while(ValidaIng(nom)==0);
     }while(strcmp(nom,NULL)==0);
     InsertFinJ(nom);
	.
	.
	.
	.
	.
}
// ------------------------------------------------------------------------------
int ValidaIng(char nom[]){
  int longitud=0;
  longitud=strlen(nom);
  for(int c=0; c<longitud; c++){
     if(!isalpha(nom[c]))
	return 0;
  }
  return (1);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar