我正在用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关于这里发布的代码的任何其他提示都会很棒:)
答案 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...
}