Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: krowa en 17 Septiembre 2015, 00:09 am



Título: [C] Problema: funcion 'validar_numero()' siempre me retorna 1
Publicado por: krowa en 17 Septiembre 2015, 00:09 am
[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:
-------------------------------------------------------------------
Código
  1. //[Codigo]
  2.  
  3. do{// ---------------------------------------------------------------CARGA ID
  4. if(c) printf("Ingreso un valor incorrecto, ingrese nuevamente\n");
  5. printf("\nIngrese Id del curso: ");
  6. //fflush(stdin);-----------------------NO USAR-> EN SU LUGAR USAR "lbuffer()" -> Funcion creada en este archivo.
  7. //scanf("%s",aux);
  8. fgets(aux,100,stdin);//fgets en este caso guarda lo que se ingresa del teclado ('stdin') en la cadena de caracteres 'aux'
  9. //con un maximo de 99 caracteres (100-1). Si se ingresan menos de 99 caracteres se agrega un '\n'
  10. if(aux[strlen(aux)-1]=='\n')aux[strlen(aux)-1]=='\0';//Si se agrega un \'n' lo "sacamos" poniendo en su lugar un '\0'
  11. lbuffer();//funcion que limpia buffer
  12. printf("\n Ingresaste: %s\n",aux);
  13. if(validar_numero(aux)==1)c=1;
  14. else c=0;
  15. }while(validar_numero(aux)==1);//Si la funcion retorna 1 > Ingreso un valor incorrecto
  16.  
  17. //Si sale del while > es correcto el valor ingresado (Es numero) > guardamos en archivo
  18. curso[i].id=atoi(aux); //atoi me convierte la cadena de caracteres a int
  19. // ---------------------------------------------------------------FIN CARGA ID
  20.  
  21.  
  22. //------------------------------------------------------------------------------
  23. //Dejo aca la funcion "validar_numero(char *n)" y "lbuffer()":
  24. //-------------------------------------------------------------------------------
  25.  
  26. int validar_numero(char *n){
  27. int largo=strlen(n), es_num=0, bien=0;
  28. for(int i=0;i<largo;i++){
  29. es_num=atoi(n+i); //atoi retorna 0 cuando NO es numero
  30. if(!es_num)return 1;
  31. }//for
  32. return 0;//Si la funcion llego hasta aca > SI es numero (Retornamos 0)
  33.  
  34. }
  35.  
  36. void lbuffer(){
  37. /* 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" */
  38. int d;
  39. while((d=getchar())!= '\n' && d != EOF);
  40. }
  41.  




Título: Re: [C] Problema: funcion 'validar_numero()' siempre me retorna 1
Publicado por: engel lex en 17 Septiembre 2015, 00:36 am
revisa que tipo de variable estás pasando y tus opciones de compilación, para mi funciona 100%

Código
  1. #include<iostream>
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. using namespace std;
  5. int validar_numero(char *n){
  6. int largo=strlen(n), es_num=0, bien=0;
  7. for(int i=0;i<largo;i++){
  8. es_num=atoi(n+i); //atoi retorna 0 cuando NO es numero
  9. if(!es_num)return 1;
  10. }//for
  11. return 0;//Si la funcion llego hasta aca > SI es numero (Retornamos 0)
  12.  
  13. }
  14.  
  15. int main()
  16. {
  17.    char n[11] = "-1a11";
  18.    int q = validar_numero(n);
  19.  
  20.    cout<<q<<endl;
  21.  
  22.    return 0;
  23. }