/* Convertir una cadena de caracteres a un valor entero mediante una función que reciba la dirección de la cadena y la dirección de la variable que almacenará el resultado. (Se supone que hay números el la cadena). 
-Buscar el comienzo de numero distinto de blanco, supondremos + o -.
-Averiguar el signo, si no es un carácter valido devuelve un error. 
-Si el carácter es un digito se pasa a decimal ((ascii)numero-48)*10.
-Si la función finaliza de forma correcta devuelve un uno.   */

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int convierte(char*,float*);

void main()
{
  char cadena[50];
  float valor; 
  printf("Dame una cadena:");
  gets(cadena);
  if (convierte(cadena,&valor))
     printf("El valor es:%f",valor);
  else
     puts("ERROR");
}

int convierte(char *pcadena,float *pvalor)
{
  int neg=1,error=0;
  while(*pcadena==' ')
      pcadena++;

  if (!isdigit(*pcadena))
  {
     if (*pcadena=='-')
        neg=-1;
     else 
        if (*pcadena=='+')
           neg=1;
        else
           error=1;
     pcadena++;
  }

  while ((*pcadena) && (!error))
  {
     if (!isdigit(*pcadena))
        error=1;
     else
        *pvalor=*pvalor*10+((int)(*pcadena-48));
     pcadena++;
  }

  if (error) return 0;
  *pvalor=(*pvalor)*(float)neg; 
  return 1; 
}

d VOLVER