Программа не переходит во входной файл, чтобы прочитать его

Вот те части кода, которые у меня есть:

ifstream inFile;
inFile.open("Product1.wrl");
...
if (!inFile.is_open()){
cout << "Could not open file to read" << endl;
return 0;
}
else
while(!inFile.eof()){
getline(inFile, line);
cout << line << endl;  //this statement only to chech the info stored in "line" string
if (line.find("PointSet"))
inFile >> Point1;
}

Вывод показывает мне одну и ту же строку снова и снова. Таким образом, это означает, что курсор внутри файла не перемещается и getline читает ту же строку.

В чем может быть проблема этого странного поведения?

Если это актуально:
Файл открывается как .txt файл и содержит точную информацию, мне нужно.

Хорошо, я понял проблему:
Даже после первого изменения возвращаемое значение line.find("PointSet")is: 429467295 … пока мой line Строка содержит только одну букву «S». Зачем?

0

Решение

+ Изменить

while(!inFile.eof()){
getline(inFile, line);

в

while( getline(inFile, line) ) {

Я не знаю, почему люди укушены eof() довольно часто, но они делают.

смешивание getline с >> проблематично, потому что >> оставит '\n' в потоке, поэтому следующий getline вернусь пустым. Изменить это использовать getline также.

if (line.find("PointSet")) не то, что вы хотите. find возвращает позицию в string, или же std::string::npos если это не было найдено.

Также вы можете изменить

ifstream inFile;
inFile.open("Product1.wrl");

в

ifstream inFile ("Product1.wrl");

Вот версия, показывающая чтение:

class Point
{
public:
int i, j;
};

template <typename CharT>
std::basic_istream<CharT>& operator>>
(std::basic_istream<CharT>& is, Point& p)
{
is >> p.i >> p.j;
return is;
}

int main()
{
Point point1;
std::string line;
while(std::getline(std::cin, line))
{
std::cout << line << '\n';  //this statement only to chech the info stored in "line" string
if (line.find("PointSet") != std::string::npos)
{
std::string pointString;
if (std::getline(std::cin, pointString))
{
std::istringstream iss(pointString);
iss >> point1;
std::cout << "Got point " << point1.i << ", " << point1.j << '\n';
}
else
{
std::cout << "Uhoh, forget to provide a line with a PointSet!\n";
}
}
}

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]