这些是我所拥有的代码的一部分:
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")
的返回值为:429467295 ...而我的line
字符串只包含一个字母“S”。为什么呢?
答案 0 :(得分: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";
}
}
}
}