Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/10/2015, 13:57
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Validación de numeros (if-else-switch) en programa C

No puedes hacerlo asi, tienes que usar o bien un char[] o bien un string y luego comprobar que solo haya numeros.
Por ejemplo:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[])
  4. {
  5.    char cadena[10];
  6.    int i,largo,base=1,numero,error=0;
  7.  
  8.    printf("Introduce un valor numerico: ");
  9.    scanf("%s",cadena);
  10.    for(largo=0;cadena[largo] != '\0';largo++); //Obtengo el largo de la cadena
  11.    //Recorro la cadena de derecha a izquierda y voy multiplicando por 10 la base
  12.    for(i=largo-1,numero=0;i>=0;i--,base*=10){
  13.       if(cadena[i] >= '0' && cadena[i] <= '9'){
  14.          numero+=(int)(cadena[i]-48)*base; //Si es un numero lo coloco el primero
  15.       }else{
  16.          numero=0;
  17.          error=1;
  18.          break;
  19.       }
  20.    }
  21.    if(error==1)
  22.       printf("Introduce solo numeros");
  23.    else
  24.       printf("El numero es: %d",numero);
  25.    return 0;
  26. }
Con eso tendrias un control sobre lo que se ingresa y puedes filtrar el resultado. Otro modo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.    char cadena[10];
  7.    int i,error,numero;
  8.  
  9.    printf("Introduce un valor numerico: ");
  10.    scanf("%s",cadena);
  11.    //Recorro la cadena de derecha a izquierda y voy multiplicando por 10 la base
  12.    for(i=0,error=0;cadena[i]!='\0';i++){
  13.       if(cadena[i] <= '0' || cadena[i] >= '9'){
  14.          error=1;
  15.          break;
  16.       }
  17.    }
  18.    if(error == 1){
  19.       printf("Introduce solo numeros");
  20.    }else{
  21.       numero=atoi(cadena);
  22.       printf("El numero es: %d",numero);
  23.    }
  24.    return 0;
  25. }

Última edición por aguml; 30/10/2015 a las 14:39