我的技能非常基础。我正在尝试为文本游戏制作保存和加载功能。这是我的代码:
: NSManagedObject
当我输入用空格分隔的多个单词的player_name复合时,会出现问题。例如,当我输入“名称”时,#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
#include "variables.h"
// CORE FUNCTIONS
void save_game()
{
std::ofstream file((savefile_path + "/" + player_name + ".txt").c_str());
if (file.is_open())
{
file << engine_switch << std::endl; //int
file << map_switch << std::endl; // int
file << sub_map_switch << std::endl; // int
file << player_name << std::endl; //string
file << player_class << std::endl; // string
//file << << endl;
file.close();
}
else
{
std::cout << "A PROBLEM OCCURED";
system("pause");
}
return;
}
void load_game()
{
system("cls");
std::cout << "ENTER THE SAVE FILE NAME (SAME AS YOUR CHARACTER NAME)\nOR PRESS ENTER TO GO BACK TO MAIN MENU: ";
fflush(stdin);
getline(std::cin, player_name);
std::string name=player_name;
std::ifstream file((savefile_path + "/" + player_name + ".txt").c_str());
if(file)
{
file >> engine_switch; // this is int
file >> map_switch; // this is int
file >> sub_map_switch; /this is int
file >> player_name; //string
file >> player_class; //string
//file >> ;
return;
}
else
{
if(player_name=="\0")
{
engine_switch=1;
return;
}
else
{
system("cls");
std::cout << "COULDN'T OPEN THE SAVE FILE" << std::endl;
system("pause");
load_game();
}
}
engine_switch=1;
return;
}
成为名称,player_name
成为名称,实际的player_class
不会放入任何变量。
我尝试了player_class
功能,但没有用,我甚至都不理解它。我尝试使用rdbuf()
,stream
,string
,我在网上找到的所有内容都可以理解,但它总是出错。
答案 0 :(得分:0)
您需要在getline
函数中使用>>
代替load-game
运算符。
而不是file >> player_name
做getline(file, player_name)
这应该用于替换file >> someVar
编辑:我没有意识到其他人是整数值。对于那些您仍应使用>>
运算符的人。
答案 1 :(得分:0)
从流中提取字符串时,空格被视为分隔符
情况更糟:在您的代码中,player_name
后跟player_class
,后者也是一个字符串。你的程序应该如何解释这个:
10 15 20 John William Doe hero B
您的程序如何猜测John William Doe
是一个组合名称而hero B
是该类别?
最简单的解决方案是将所有字符串写入文件中的单独行。加载后,您可以使用getline()
:
file >> engine_switch; // this is int
file >> map_switch; // this is int
file >> sub_map_switch; /this is int
getline (file, player_name); //string
getline (file, player_class; //string