Wie zu Lesen, schweben Sie mit der wissenschaftlichen notation aus der Datei C++?
Ich habe eine Datei mit diesem format:
-0.0064785667 0.73900002 0.028505694 4.7858757e-39 315 218
-0.0051828534 0.73900002 0.028505694 4.6936954e-39 316 218
-0.0038818798 0.73799998 0.028467119 5.1546736e-39 317 218
-0.0025879198 0.73799998 0.028467119 5.6160217e-39 318 218
-0.0012939599 0.73799998 0.028467119 6.4461411e-39 319 218
Lese ich es mit diesem code:
using namespace std;
ifstream inputFile;
//Opens data file for reading.
inputFile.open(filePath.c_str());
//Creates vector, initially with 0 points.
vector<Point> data(0);
float temp_x,temp_y,temp_z,rgb=0,discard_1=0,discard_2=0;
//Read contents of file till EOF.
while (inputFile.good()){
inputFile >> temp_x >> temp_y >> temp_z >> rgb >> discard_1 >> discard_2;
data.push_back(Point(temp_x,temp_y,temp_z,rgb));
}
if (!inputFile.eof())
if (inputFile.fail()) cout << "Type mismatch during parsing." << endl;
else cout << "Unknow problem during parsing." << endl;
//Close data file.
inputFile.close();
Lesen der wissenschaftlichen notation float Ergebnisse in einem Typenkonflikt.
Wie kann ich Lesen Sie alle zahlen einschließlich der wissenschaftlichen notation schwimmen?
- haben Sie versucht, die Deklaration der Variablen als double?
- Ich nicht reproduzieren dieser Fehler. Können Sie bieten ein komplettes Programm, dass zeigt die Fehler (ideallly indem geändert wird, das Beispiel, das ich gepostet)?
- Versucht deklarieren rgb als verdoppeln, und ist in Betrieb. Aber ich würde gerne in der Lage sein zu Lesen der Schwimmer direkt...
- Sie erhalten einen fail-Zustand, wenn Sie versuchen zu Lesen, dass ein float, was größer ist, dass der max Schwimmer (etwa 3.40E38). Das ist nicht der Fall mit den Werten, die Sie hier zeigen (Sie sollte gelesen werden als 0 in einer float), könnte aber erklären, warum es funktioniert mit Doppel-und nicht mit float.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wahrscheinlich die while-Schleife. Verwenden Sie niemals
while(inputFile.good())
. Verwenden Sie diese:Diese Antwort zu einer anderen Frage erklärt, warum. Sie könnten auch interessiert sein in diese Antwort, die schlägt eine elegantere Lösung.
"Type mismatch during parsing."
auch wenn alles lief fein?Point
durch das Lesen Sie in einer dummy-Lüge, die du hast in deinem code ein (Sie brauchen nur eine dummy-variable, obwohl). Dies ist natürlich problematisch, wenn Sie möchtenPoint
arbeiten mit verschiedenen Datei-Formaten. In diesem Fall denke ich, du könntest eine Klasse schreibenPointAdapter
hat, einen impliziten cast zuPoint
und eine Extraktions-operator, der Lesen kann, die bestimmte Datei-format. Ich will hinzufügen, einen Vorschlag auf meine Antwort.Auszubauen Björn Pollex Antwort mit einem Beispiel ohne error-handling:
point_line
s zerstört werden würde, nachdem Sie gewesen war, in Scheiben geschnitten in dervector
, also ich glaube nicht, dass es ein memory leak. Vielleicht sollte ich diese Frage als eine Frage...point
mit einem Verweis aufpoint_line
, das ist völlig in Ordnung.