usar control de caracter

Iniciado por retsam07, 16 Noviembre 2012, 03:25 AM

0 Miembros y 1 Visitante están viendo este tema.

retsam07

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

Don Pollo

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.

Sacopapas

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

retsam07

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

rir3760

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|.

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

retsam07

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