Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: retsam07 en 16 Noviembre 2012, 03:25 AM

Título: usar control de caracter
Publicado por: retsam07 en 16 Noviembre 2012, 03:25 AM
buenas

hice un programa que pide al usuario ingresar la edad para ver si puede votar . necesito hacer un tipo de validación para que el programa solo acepte números y si por error el usuario introduce un carácter le tire un mensaje de error y le pida de nuevo que introduzca la edad. tiene que ser en lenguaje C y uso devc++

este es el código

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

int main()
{
       int edad;
       int resp=1;
       
       while(resp==1)
       {
       
       printf("\n\t\t\t\tPRACTICA #1\n");
       printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
       printf("\t\t  mensaje en pantalla si la persona puede votar o no.\n\n");
       
       printf("\n  INGRESE LA EDAD: ");
       scanf("%d",&edad);
       
     
       
       if(edad>=18){
       printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
       }
       
       if((edad>0)&&(edad<18)) {
       printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
       }
       
       if (edad<0){
       printf("\t\n<<ERROR>>OPCION INVALIDA\n\n ");
       }
       
       printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
       scanf("%d", &resp);
       
       while (( resp !=1) && (resp !=0 ))
     {
         printf("\n<<opcion invalida>>\n");
         printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
         scanf( "%d", &resp);
     }
       
       if (resp==0){
       exit(0);
       }
       else if (resp == 1){
         resp=1;
     }
       
       system("cls");  
       }
       getch();
       
}

gracias de antemano
Título: Re: usar control de caracter
Publicado por: Don Pollo en 16 Noviembre 2012, 11:05 AM
Lo que puedes hacer es leer la edad a un array de caracteres, y después uno a uno haces esta comprobación:

if(edad[0] >= 0 && edad[0] <= 9)

Cuando tengas comprobado que todos son números, lo pasas a int y listo.
Título: Re: usar control de caracter
Publicado por: Sacopapas en 16 Noviembre 2012, 11:15 AM
Puedes controlar si lo que te pasan son números o letras con código ASCII , si están dentro de un rango son números y sino son caracteres u otra cosa.

http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif
Título: Re: usar control de caracter
Publicado por: retsam07 en 20 Noviembre 2012, 22:32 PM
hice lo que me recomendaste pero ahora  tengo un problema y  es que quiero que si el usuario introduzca 18 le salga puede votar,

o sea que entre al if en donde esta la condicion de que si puede votar o no
es que no entra a ese if

lo hice asi

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

int main()
{
        char edad[0];
        int resp=1,valida=1;
       
        while(resp==1)
        {
                     
         do{
         valida=1;
        printf("\n\t\t\t\tPRACTICA #1\n");
        printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
        printf("\t\t  mensaje en pantalla si la persona puede votar o no.\n\n");
       
        printf("\n  INGRESE LA EDAD: ");
        scanf("%s",edad);
         
       if(edad[0]<'0')
       valida=0;
       if(edad[0]>'9')
       valida=0;

       if(valida==0){
       printf("ERROR<<OPCION INVALIDA>>.\n");
       }
       {
       system("cls");}
       }while(valida=1);         
             
     
         
     
       
        if(edad[0]>=18){
        printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
        }
       
        if((edad[0]>0)&&(edad[0]<18)) {
        printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
        }
       
        if (edad[0]<0){
        printf("\t\n<<ERROR>>OPCION INVALIDA\n\n ");
        }
       
        printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
        scanf("%d", &resp);
       
        while (( resp !=1) && (resp !=0 ))
      {
          printf("\n<<opcion invalida>>\n");
          printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
          scanf( "%d", &resp);
      }
       
        if (resp==0){
        exit(0);
        }
        else if (resp == 1){
          resp=1;
      }
       
        system("cls"); 
        }
        getch();
       
}

gracias
Título: Re: usar control de caracter
Publicado por: rir3760 en 20 Noviembre 2012, 23:21 PM
La declaración del array:
char edad[0];
No es valida ya que se debe indicar el numero de elementos mediante una expresión de tipo entero (short, int , etc.) mayor que cero. Y se recomienda evitar el uso de la biblioteca conio de Borland, mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Para validar la entrada debes verificar el valor de retorno de la función "scanf", esta indica el numero de conversiones con éxito. Un ejemplo de su uso:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num;
   int rv;
   int ch;
   
   while (1){
      printf("Numero: ");
      fflush(stdout);
      if ((rv = scanf("%d", &num)) == EOF)
         return EXIT_FAILURE;
      else if (rv == 1)
         break;
     
      while ((ch = getchar()) != EOF && ch != '\n')
         ;
   }
   
   printf("El numero es %d\n", num);
   
   return EXIT_SUCCESS;
}


Un saludo
Título: Re: usar control de caracter
Publicado por: retsam07 en 22 Noviembre 2012, 13:50 PM
buenas de nuevo

ahora si que el programa esta ya casi cocido pero tengo un pequeño problema es que en la parte

else if (edad[0]>0 && edad[0]<18){
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}
no me entra si no que sale que el usuario puede votar,para ver si me pueden ayudar o decirme cual es el error. gracias

este es el codigo completo

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

int main()
{
        char edad[0];
        int resp=1;
       
        while(resp==1)
        {
         
        printf("\n\t\t\t\tPRACTICA #1\n");
        printf("\n\t\tPrograma que permita capturar la edad e indique con un\n ");
        printf("\t\t  mensaje en pantalla si la persona puede votar o no.\n\n");
       
        printf("ingrese numero: ");
scanf("%s", edad);

if((edad[0]>='a' && edad[0]<='z')||(edad[0]>='A' && edad[0]<='Z')){
printf("\n ESTE NO ES NUMERO\n\n");
}

else if (edad[0]=='-'){
printf("\n ES UN NUMERO pero no es POSITIVO\n\n ");
}

else if(edad[0]>=18){
printf("\n <<EL USUARIO PUEDE VOTAR>>\n");
}

else if (edad[0]>0 && edad[0]<18){
printf("\n << EL USUARIO NO PUEDE VOTAR>>\n");
}

       
        printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
        scanf("%d", &resp);
       
        while (( resp !=1) && (resp !=0 ))
      {
          printf("\n<<opcion invalida>>\n");
          printf("\nSi desea repetir teclee 1, si desea salir teclee 0\n");
          scanf( "%d", &resp);
      }
       
        if (resp==0){
        exit(0);
        }
        else if (resp == 1){
          resp=1;
      }
       
        system("cls"); 
        }
        getch();
       
}