elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  usar control de caracter
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: usar control de caracter  (Leído 2,914 veces)
retsam07

Desconectado Desconectado

Mensajes: 7


Ver Perfil
usar control de caracter
« 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


« Última modificación: 16 Noviembre 2012, 03:30 am por retsam07 » En línea

Don Pollo

Desconectado Desconectado

Mensajes: 74

/* No comments */


Ver Perfil
Re: usar control de caracter
« Respuesta #1 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:

Código
  1. if(edad[0] >= 0 && edad[0] <= 9)

Cuando tengas comprobado que todos son números, lo pasas a int y listo.


En línea

Sacopapas

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: usar control de caracter
« Respuesta #2 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
En línea

retsam07

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: usar control de caracter
« Respuesta #3 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
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: usar control de caracter
« Respuesta #4 en: 20 Noviembre 2012, 23:21 pm »

La declaración del array:
Código
  1. 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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int num;
  7.   int rv;
  8.   int ch;
  9.  
  10.   while (1){
  11.      printf("Numero: ");
  12.      fflush(stdout);
  13.      if ((rv = scanf("%d", &num)) == EOF)
  14.         return EXIT_FAILURE;
  15.      else if (rv == 1)
  16.         break;
  17.  
  18.      while ((ch = getchar()) != EOF && ch != '\n')
  19.         ;
  20.   }
  21.  
  22.   printf("El numero es %d\n", num);
  23.  
  24.   return EXIT_SUCCESS;
  25. }

Un saludo
En línea

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

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: usar control de caracter
« Respuesta #5 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();
       
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines