Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Validación de numeros (if-else-switch) en programa C

Estas en el tema de Validación de numeros (if-else-switch) en programa C en el foro de C/C++ en Foros del Web. Hola, soy nuevo y tengo un problema, quisiera agregar condiciones if en un programa, para evitar que se utilicen letras y unicamente numeros, el problema ...
  #1 (permalink)  
Antiguo 30/10/2015, 11:49
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 9 años
Puntos: 0
Exclamación Validación de numeros (if-else-switch) en programa C

Hola, soy nuevo y tengo un problema, quisiera agregar condiciones if en un programa, para evitar que se utilicen letras y unicamente numeros, el problema es que no se me ocurre como hacerlo.. me pueden ayudar? Anexo el programa.


#include <stdio.h>
int valor,opcion,num,i=0,j=0;
int matriz[4][4];

void menu(void)
{
printf("\nMENU");
printf("\n1.Dar Valores a Matriz 4*4. [Ojo: Recuerde que dichos valores que\nrellenan la matriz deben tener un significado, revisar manual].\n");
printf("\n2.Imprimir Matriz.\n");
printf("\n3.Seleccionar valor a comparar.\n");
printf("\n4.Salir del programa.\n\n");
}

void DatosMatriz (int num) //Aqui debe de haber una condicion, que solo acepte numeros.
{

for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("Ingrese el valor a [%i][%i] en la matriz:",i,j);
scanf("%i",&matriz[i][j]); //Condicionar si se escribe algun char imprima msj de error.
}
printf("\n");
}

}

void impresionMatriz (void)
{

for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("||%i|| ",matriz[i][j]);
}
printf("\n");
}
}

int compara(int valor){
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{

if(valor==matriz[i][j])
{
printf("\nDato existente en la posicion [%d][%d]. \n\n",i,j);
}
}
}

}

int main (){
printf(" \n >>>Mundo de tarski<<<\n");
printf("Buenas tardes/dias/noches, este programa funciona de la siguiente manera:\n\n...Primeramente es una matriz que recibe valores enteros, lo cual significa\n");
printf("que cada valor n, tiene un significado o equivalencia, por ejemplo:\n 1==azul, 2==rojo.. etc para asi poder comparar la matriz con el problema \ndel usuario y saber si es verdadero o no el ejercicio.");
printf("\n\nDicha tabla de equivalencias se encuentra en el manual.\n\nPara dar inicio al programa debe seleccionar entre una de la siguientes\nopciones[de preferencia seguir el orden].\n\n");
printf("Las equivalencias se encuentran en el manual, los cuales son\n3 ejercicios.\n\n");
do{
menu();
printf("\nElija una opcion: ");
scanf("%i",&opcion);

if (opcion<=0 && opcion>=10) // Aqui como condiciono que NO ACEPTE letras o caracteres y solo numeros para el ciclo switch?
{
printf("opcion no valida\n\n\n");
}
else
{
switch (opcion)
{
case 1: DatosMatriz(num);
break;
case 2: printf("\nLa matriz impresa es:\n\n");
impresionMatriz ();
break;
case 3: printf("Asigne un valor a comparar: \n");
scanf("%i*%i", &valor);
compara (valor);
if (valor <= 10 && valor >=0)
{

if (valor==5)
{
printf("\n\nEJERCICIO '{Para todos}t, Cuadrado (t) v Rojo (t)' == 5 SI SE ENCUENTRA EN MATRIZ\n\n\n");
}
if (valor==6)
{
printf("\n\nEJERCICIO '{Para todos}t, Triangulo(t)v Rojo(t)' == 6 SI SE ENCUENTRA EN MATRIZ\n\n\n");
}
if (valor==7)
{
printf("\n\nEJERCICIO '{Existe al menos}t, Cuadrado(t)%c Rojo(t)' == 7 SI SE ENCUENTRA EN MATRIZ\n\n\n",94);
} else {printf("Ejercicio seleccionado en manual no encontrado en matriz\n\n\n");}
}
break;
default:printf("\n\n\n");
}


}

}while(opcion!=4);
printf("\n\n\nGracias por usar el programa! Vuelva pronto!!!\n\n");


return 0;
}


GRACIAS!
  #2 (permalink)  
Antiguo 30/10/2015, 13:57
 
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
  #3 (permalink)  
Antiguo 30/10/2015, 16:42
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Validación de numeros (if-else-switch) en programa C

Ya que usas atoi en el segundo ejemplo... ¿por qué no usar strlen en el primero?

aunque tampoco es que sea imprescindible conocer la longitud de la cadena.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char* argv[])
  4. {
  5.    char cadena[10];
  6.    char* ptr;
  7.    int numero=0,error=0;
  8.  
  9.    printf("Introduce un valor numerico: ");
  10.    scanf("%s",cadena);
  11.    for(ptr=cadena,*ptr!=0 && error==0;++ptr)
  12.    {
  13.       error = (*ptr<'0' || *ptr>'9');
  14.       numero = (error)? 0 : numero*10+*ptr-'0';
  15.    }
  16.  
  17.    if(error==1)
  18.       printf("Introduce solo numeros");
  19.    else
  20.       printf("El numero es: %d",numero);
  21.    return 0;
  22. }

Nota: Estoy respondiendo desde el movil, si el código no compila avisadme y lo corrijo.

Un saludo.

Etiquetas: switch
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:48.