[Consulta C]
Buenas!! ando con un problema seguramente no muy dificil de resolver pero despues de horas de programacion e investigacion ya nose que probar, de todas maneras voy a seguir intentando y si encuentro solucion la publico..
El problema:
La funcion "validar_numero()" retorna siempre 1!! Aunque ingrese -1, 15, 23, 123, asd,e3,2a, etc
Dejo parte del codigo y sus respectivas funciones:
-------------------------------------------------------------------
Buenas!! ando con un problema seguramente no muy dificil de resolver pero despues de horas de programacion e investigacion ya nose que probar, de todas maneras voy a seguir intentando y si encuentro solucion la publico..
El problema:
La funcion "validar_numero()" retorna siempre 1!! Aunque ingrese -1, 15, 23, 123, asd,e3,2a, etc
Dejo parte del codigo y sus respectivas funciones:
-------------------------------------------------------------------
Código (cpp) [Seleccionar]
//[Codigo]
do{// ---------------------------------------------------------------CARGA ID
if(c) printf("Ingreso un valor incorrecto, ingrese nuevamente\n");
printf("\nIngrese Id del curso: ");
//fflush(stdin);-----------------------NO USAR-> EN SU LUGAR USAR "lbuffer()" -> Funcion creada en este archivo.
//scanf("%s",aux);
fgets(aux,100,stdin);//fgets en este caso guarda lo que se ingresa del teclado ('stdin') en la cadena de caracteres 'aux'
//con un maximo de 99 caracteres (100-1). Si se ingresan menos de 99 caracteres se agrega un '\n'
if(aux[strlen(aux)-1]=='\n')aux[strlen(aux)-1]=='\0';//Si se agrega un \'n' lo "sacamos" poniendo en su lugar un '\0'
lbuffer();//funcion que limpia buffer
printf("\n Ingresaste: %s\n",aux);
if(validar_numero(aux)==1)c=1;
else c=0;
}while(validar_numero(aux)==1);//Si la funcion retorna 1 > Ingreso un valor incorrecto
//Si sale del while > es correcto el valor ingresado (Es numero) > guardamos en archivo
curso[i].id=atoi(aux); //atoi me convierte la cadena de caracteres a int
// ---------------------------------------------------------------FIN CARGA ID
//------------------------------------------------------------------------------
//Dejo aca la funcion "validar_numero(char *n)" y "lbuffer()":
//-------------------------------------------------------------------------------
int validar_numero(char *n){
int largo=strlen(n), es_num=0, bien=0;
for(int i=0;i<largo;i++){
es_num=atoi(n+i); //atoi retorna 0 cuando NO es numero
if(!es_num)return 1;
}//for
return 0;//Si la funcion llego hasta aca > SI es numero (Retornamos 0)
}
void lbuffer(){
/* esta funcion 'lbuffer()' es para limpiar el buffer, no uso 'fflush(stdin)' por que no es correcto usarla, ademas de que trabajo en GNU/Linux (Debian) y "no funciona" */
int d;
while((d=getchar())!= '\n' && d != EOF);
}