使用getline来解析和存储变量

时间:2014-02-03 13:55:23

标签: c++ parsing while-loop savestate

我正在用c ++编写一个简单的沙箱基于文本的游戏,并且刚刚开始保存文件。看了这个网站上的一些问题和其他人我选择自己做,而不是使用boost库等。

我的保存代码工作正常但是,我的加载代码不能正常工作!

int loadGame(string filename){
string delim=":";
string readline;

ifstream filestream;
filestream.open(filename.c_str());

while(getline(filestream,readline)){
    cout << readline << endl;
    stringstream linestream(readline);
string         data;
getline(linestream, data, ':');
linestream >> playername >> location[0] >> location[1] >> hitpoints >> coins >> axes >> swords >> food >> maps;
}
return 0;
}

它正如您所期望的那样循环,但是然后只将最后一个'maps'变量存储到playername。 我知道while(getline(filestream,readline)){是导致问题的原因但是作为一个新手,我无法看到如何解决这个问题而不添加一个包含大量ifs的循环 (伪代码)

while(n<10){
if n=1{ linestream >> playername}
if n=2{linestream >> location[0]...

在我看来非常抽出而效率低下。

示例保存可能如下所示:

playername:John
location[0]:400
location[1]:840
hitpoints:100
coins:35
axes:0
swords:0
food:0
maps:3

我知道这可能措辞不多但我对这个问题有任何帮助。提前致谢。 ps关于这里发布的代码的任何其他提示都会很棒:)

2 个答案:

答案 0 :(得分:1)

在loadGame函数中,您将未知“arg”检查为字符串“null”,而不是NULL。

答案 1 :(得分:1)

如果您从C ++开始,我可以提供一些提示。

首先,不要为解析而烦恼。你的时间有很多有趣的事情要做。选择更简单的输入格式,例如

playername John Doe
hitpoints 300

请注意,我使用空格将值与键分开。现在你可以简单地做一些事情:

std::string key, value;
while (<more input>)
{
    input_file >> key;
    std::getline(input_file, value);

    if (key == "playername")
        // whatever...
    else if (key == "maps")
        // stuff...
}
相关问题