Carga de datos flotantes desde archivo

Estoy haciendo unos primeros pinitos en C++ y me he atascado en la carga de datos de tipo número real o coma flotante desde un archivo en el que figuran separados por comas. El programita que he escrito para ello es el siguiente:

#include <iostream>
#include <iomanip>

using namespace std;
float fX, fY, fZ;
FILE *pEnt;

main()
{
if (NULL ==(pEnt=fopen("nivelesM.txt","rb"))) // si no existe error
 {
 cerr << "No existe el archivo " << "nivelesM.txt" << " o est  en uso" << endl;
 return(0);
 }
fscanf(pEnt, "%f, %f, %f", &fX, &fY, &fZ);
while (!feof(pEnt))
 {
 cout << setprecision(3) << fixed << "Le¡do registro con x = " << fX << " y = " << fY << " z = " << fZ << endl;
 fscanf(pEnt, "%f, %f, %f", &fX, &fY, &fZ);
 }
fclose(pEnt);
}

El archivo nivelesM.txt tiene 24 filas y, por poner un ejemplo del problema, las tres primeras son:

791039.015, 3092313.785, -26.248
791039.015, 3092312.785, -26.248
791029.396, 3092311.043, 2.645

Y lo que obtengo es:

Leído registro con x = 791039.000 y = 3092313.750 z = -26.248
Leído registro con x = 791039.000 y = 3092312.750 z = -26.248
Leído registro con x = 791029.375 y = 3092311.000 z = 2.645

Cómo se puede ver hay una ligera discrepancia en los valores de x e y que no consigo comprender.

¿Puede alguien echarme una mano?

1 respuesta

Respuesta
1

Ya encontré la causa (y de paso la solución): para cargar correctamente ese tipo de valores tengo que declararlos double (eso ya lo había probado pero el resultado no me había convencido) y caracterizar tanto la entrada como la salida como "%lf" en lugar de "%f". Con eso los datos se cargan correctamente y se presentan con el valor que figuraba en el archivo.

(Lo que más me ha costado es encontrar la manera de decir esto aquí aunque lo averigüé al día siguiente de plantear la pregunta).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas