Convertir char * a flotar o doblar
Tengo un valor que leí en un archivo y se almacena como un char *. El valor es un número monetario, #. ##, ##. ## o ###. ##. Quiero convertir el char * a un número que pueda usar en los cálculos, he intentado atof and strtod y me han dado números de basura. ¿Cuál es la forma correcta de hacer esto y por qué la forma en que lo estoy haciendo mal?
Esto es esencialmente lo que estoy haciendo, solo el valor char * se lee desde un archivo. Cuando imprimo las variables temp y ftemp, son simplemente basura, números negativos gigantescos.
Otra edición:
Estoy ejecutando exactamente esto en gcc
#include <stdio.h>
int main()
{
char *test = "12.11";
double temp = strtod(test,NULL);
float ftemp = atof(test);
printf("price: %f, %f",temp,ftemp);
return 0;
}
y mi salida es el precio: 3344336.000000, 3344336.000000
Edit: Aquí está mi código
if(file != NULL)
{
char curLine [128];
while(fgets(curLine, sizeof curLine, file) != NULL)
{
tempVal = strtok(curLine,"|");
pairs[i].name= strdup(tempVal);
tempVal = strtok(NULL,"|");
pairs[i].value= strdup(tempVal);
++i;
}
fclose(file);
}
double temp = strtod(pairs[0].value,NULL);
float ftemp = atof(pairs[0].value);
printf("price: %d, %f",temp,ftemp);
Mi archivo de entrada es un nombre muy simple, pares de valores como este:
NAME|VALUE
NAME|VALUE
NAME|VALUE
siendo el valor montos en dólares
SOLUCIONADO: Gracias a todos, estaba usando% d en lugar de% f y no tenía los encabezados correctos incluidos.