[C] Problema: funcion 'validar_numero()' siempre me retorna 1

Iniciado por krowa, 17 Septiembre 2015, 00:09 AM

0 Miembros y 1 Visitante están viendo este tema.

krowa

[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 (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);
}




engel lex

revisa que tipo de variable estás pasando y tus opciones de compilación, para mi funciona 100%

Código (cpp) [Seleccionar]
#include<iostream>
#include <stdlib.h> 
#include <string.h> 
using namespace std;
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)

}

int main()
{
    char n[11] = "-1a11";
    int q = validar_numero(n);

    cout<<q<<endl;

    return 0;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.