从包含名称和值对的文件中读取值时,我设法跳过了名称部分。但是有没有另一种方法可以跳过名称部分而不声明一个虚拟字符串来存储跳过的数据?
示例文本文件:http://i.stack.imgur.com/94l1w.png
void loadConfigFile()
{
ifstream file(folder + "config.txt");
while (!file.eof())
{
file >> skip;
file >> screenMode;
if (screenMode == "on")
notFullScreen = 0;
else if (screenMode == "off")
notFullScreen = 1;
file >> skip;
file >> playerXPosMS;
file >> skip;
file >> playerYPosMS;
file >> skip;
file >> playerGForce;
}
file.close();
}
答案 0 :(得分:5)
您可以使用std::cin.ignore
忽略某些指定分隔符的输入(例如,换行,跳过整行)。
static const int max_line = 65536;
std::cin.ignore(max_line, '\n');
虽然很多人建议指定最多类似std::numeric_limits<std::streamsize>::max()
的内容,但事实并非如此。如果用户意外地将程序指向错误的文件,那么他们不应该等待,而是在被告知出错之前消耗了过多的数据。
另外两点。
while (!file.eof())
。它主要导致问题。对于这样的情况,您确实要定义struct
或class
来保存相关值,为该类定义operator>>
,然后使用while (file>>player_object) ...
std::getline
。