C ++读取包含多种变量的txt文件

时间:2017-03-22 18:55:08

标签: c++ string file int loading

我的技能非常基础。我正在尝试为文本游戏制作保存和加载功能。这是我的代码:

: 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()streamstring,我在网上找到的所有内容都可以理解,但它总是出错。

2 个答案:

答案 0 :(得分:0)

您需要在getline函数中使用>>代替load-game运算符。

而不是file >> player_namegetline(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