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 ?
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 ?
Con ese número el integer se te desborda (posiblemente), utiliza atol()
// obviamente, tambien existe atos()
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
Tendras que hacerte una funcioncita, me parece
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
Si ves que falla, avisa, y lo miro mejor.
Saludos.
¿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
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
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.
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