Я пытаюсь прочитать данные из входного файла, который содержит целое число в первой строке (представляет количество изображений, перечисленных в файле), число с плавающей запятой во второй строке (это используется для других вычислений в основной программе) и значения с плавающей запятой в каждой последующей строке, заканчивающиеся именем файла изображения, в одном файле data.txt.Последняя строка файла data.txt содержит краткое описание того, для чего используются данные, но они не читаются программой.Когда я пытаюсь прочитать данные и распечатать их на экране, значения неверны.Первая строка файла data.txt - это 5, но когда я его распечатываю, я получаю 0, к которому я его инициализировал.Вторая строка - это значение с плавающей запятой, которое я считаю, и оно также выводится как 0, что также является инициализацией.Остальные данные считываются циклом while, при котором выводятся только части данных, но ничего не печатается.Я вставил cout << inputFile.tellg << endl;оператор, чтобы увидеть, куда указывает указатель файла, но он возвращает -1.Я полностью застрял на этом.Любое понимание будет высоко ценится.Спасибо за ваше время и знания. </p>
Пожалуйста, приложите образец копии файла data.txt, а также файла main.cpp.
data.txt
5
5.50e+11
4.4960e+11 0.0000e+00 0.0000e+00 4.9800e+04 5.9740e+24 cat.gif
3.2790e+11 0.0000e+00 0.0000e+00 3.4100e+04 6.4190e+23 dog.gif
2.7900e+10 0.0000e+00 0.0000e+00 7.7900e+04 3.3020e+23 mouse.gif
0.0000e+00 0.0000e+00 0.0000e+00 6.0000e+00 1.9890e+30 squirrel.gif
5.0820e+11 0.0000e+00 0.0000e+00 7.5000e+04 4.8690e+24 fox.gif
This file contains an example of data stored in a text file
main.cpp
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;
int main( int argc, char* argv[ ] )
{
float xPosition, yPosition;
float xVelocity, yVelocity;
float animalMass;
string imgFilename;
string line;
istringstream inputStream( line );
auto N = 0; // Number of items
auto R = 0; // Real number from file
cout << "begin" << endl;
if( argc > 1 )
{
string fileName = argv[ 1 ];
ifstream inputFile( fileName );
inputFile.open( fileName, ios::in );
if( !inputFile.is_open( ))
{
cout << setw( 5 ) << " " << "Could not open file " << fileName << "." << endl;
cout << setw( 5 ) << " " << "Terminating program." << endl;
exit( 1 );
}
else
{
cout << inputFile.tellg() << endl;
inputFile >> N;
inputFile >> R;
cout << "N is now " << N << endl;
cout << "R is now " << R << endl;
cout << inputFile.tellg() << endl;
while( inputFile >> xPosition >> yPosition
>> xVelocity >> yVelocity
>> animalMass >> imgFilename )
{
cout << xPosition << " " << imgFilename << endl;
}
}
}
}
ВЫХОД:
os: ~ / Desktop / test$ ./main data.txt
begin
-1
N теперь 0
R теперь 0
-1
Как минимум, я ожидал бы, что N будет равно 5, поскольку у меня может быть неправильный тип для R или, возможно, потребуется больше вычислений после чтения данных, я не уверен.Я просто не понимаю, почему указатель файла показывает, что он находится в месте -1.