C, existe la funcion que convierte...

BEDI

Existe una funcion que convierte el numero 1.000.000 a 1000000 ?

El problema es que recojo muchos datos de un fichero de la primera forma y tengo que guardarlo como tipo char y luego no puedo por ejemplo restar dos numeros.

Que solucion habria ?

D10X

La funcion "atoi"


numero=atoi(cadena);


cadena es char y numero es int.

guner

Con ese número el integer se te desborda (posiblemente), utiliza atol()
// obviamente, tambien existe atos()

BEDI

http://www.conclase.net/c/librerias/funcion.php?fun=atoi

Parece ser que ese caso no sirve para el mio, porque los puntos no pueden entrar en una variable de tipo int

javithelong

Tendras que hacerte una funcioncita, me parece :P

Es facil, lees un número como cadena de caracteres, "1.000.000", y haces un bucle parecido a esto (tenemos el numero en 'cadena'):

int i = 0, nPuntos=0, temp=0, j=0;

while (cadena!='\0'){
if (cadena=='.')
nPuntos ++;
} // Fin while

//Con esto sacas cuantos 'packs' de numeros tenes
//Ara un bucle que te de tu numero

for (i=nPuntos; i>=0; i--){
temp += atoi(cadena+j) * exp (1000, i);
while (cadena[j]!='.'){
j++;
}
j++;
}
//No lo he probado ni nada, pero deberia funcionar
//exp se supone que es una funcion que te eleva el 1º parametro al 2º.

No suelo dar códigos, pero es que estoy con ganas de C, y en el intermedio de independence day, asi haré una excepcion :P

Si ves que falla, avisa, y lo miro mejor.
Saludos.

LOc0

#5

¿No sería más fácil quitar todos los puntos de la cadena numérica y trabajar con esa cadena "limpita"?


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{

char numero[30]="1.000.000";
char limpita[30];
int conta1, conta2, longitud;

longitud=strlen(numero);

conta1=0;
conta2=0;
while(conta1<=longitud)
{
if(numero[conta1]!='.')
limpita[conta2++]=numero[conta1];



conta1++;

}

printf("\n%d\n", atoi(limpita));

return 0;

}
[/i]

Salu2 ;)

BEDI

wow vale muchas gracias a los dos, pense que existiria alguna funcion ya creada en C para solventar este problema que no parece demasiado raro

Gracias por las dos funciones, ya he conseguido que funcione mi programa :)

EDIT:
Si teneis tiempo a mirar esto un minutillo bien, sino no pasa nada. Esta funcion se me resiste y no veo el porque no funciona. La funcion anyadir_al_final funciona correctamente

http://rafb.net/paste/results/HKB0b692.html

javithelong

Mejor si me dices lo que hace, y me pones la estructura ELEMENTO esa, que parece una lista enlazada de algo... pero mejor ponla y dime que quieres hacer con la funcion y para que sirve el 3º parametro.

Contesta y luego te lo miro.

PD: L0c0, tu codigo ta bien, pero es posible que necesites meterle un '\0' al final de tu 'limpita', porque atoi puede hacerte un descalabro sino...

Saludos.

BEDI

ammm espera estoy mirando las variables con un debuger y la funcion en si funciona, me acabo de dar cuenta cual es el problema. La lista c se crea pero no devuelvo al main de ninguna manera la direccion de la lista.

Voy a probar haciendo
int comparar(ELEMENTO *ap_lista1, ELEMENTO *ap_lista2, ELEMENTO **c)
{
}
y cambiando lo que sea necesario

EDIT:
Ya funciona todo correctamente, gracias por la ayuda :)
http://rafb.net/paste/results/j7Xagq24.html

Usuarios habituales

  • BEDI
  • javithelong
  • LOc0
  • guner
  • D10X