Одна проблема в том, что вы думаете, что файлы, которые вы читаете, должны быть 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...
};
Если вы используете IDE, добавьте исходный файл в ваш проект.
Если вы используете, например, g++
для сборки из командной строки, затем
g++ -Wall main.cpp scenes.cpp -o my_program
Где 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);
}