我正在开展一个今天到期的学校项目,而且我遇到了一个可能很简单的问题.
我需要让游戏成为"Hangman",而我所坚持的任务是从文本文件中填充一系列指针(我需要阅读图片以获取错误的答案).
void ReadScenes(string *scenes[10])
{
ifstream inFile("Scenes.txt");
if (inFile.is_open())
{
int i = 0;
string scene;
while ((inFile >> scene)&&(i<10))
{
*scenes[i] = scene;
i++;
}
}
}
int main()
{
char *scenes[10];
ReadScenes(scenes);
}
Run Code Online (Sandbox Code Playgroud)
我的文本文件如下所示:
char *scene1 =
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" * \n"
" * * \n"
" * * \n";
char *scene2 =
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * * \n"
" * * \n";
Run Code Online (Sandbox Code Playgroud)
等等.
方法中的代码用于读取密码,因为它们是用空格分隔的.所以我有10个场景,我想将它们保存在数组中.
一个问题是,您认为您阅读的文件应该是C++ - 类似于具有变量声明的文件.这不是它的工作原理.
您应该将文件的内容放入普通的C++源文件中并使用它进行构建.
就像是
std::string scenes[] = {
// Scene 1
" \n"
" \n"
" \n"
" \n"
" \n"
" \n"
" * \n"
" * * \n"
" * * \n",
// Scene 2
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * \n"
" * * \n"
" * * \n",
// And so on...
};
Run Code Online (Sandbox Code Playgroud)
如果使用IDE,请将源文件添加到项目中.
如果你使用例如g++在命令行上构建那么
g++ -Wall main.cpp scenes.cpp -o my_program
Run Code Online (Sandbox Code Playgroud)
scenes.cpp包含scenes数组的源文件在哪里.
如果您需要使用外部文本文件,而不需要任何C++代码,那么它实际上非常简单:只需按原样存储文本,不带引号或任何类似于C++声明或语句的内容.
由于您知道每个"场景"恰好是九行(并且可能是一个额外的行来分隔两个场景),因此您可以使用for循环来读取该行.
所以你的文本文件可能看起来像
*
* *
* *
*
*
*
*
*
*
*
* *
* *
然后加载它
constexpr size_t NUMBER_OF_SCENES = 2; // With the example scene file in this answer
constexpr size_t LINES_PER_SCENE = 9;
std::ifstream scene_file("scenes.txt");
std::array<std::string, NUMBER_OF_SCENES> scenes;
// Loop to read all scenes
for (std::string& scene : scenes)
{
std::string line;
// Loop to read all lines for a single scene
for (unsigned line_number = 0; line_number < LINES_PER_SCENE && std::getline(scene_file, line); ++line_number)
{
// Add line to the current scene
scene += line + '\n';
}
// Read the empty line between scenes
// Don't care about errors here
std::getline(scene_file, line);
}
Run Code Online (Sandbox Code Playgroud)