Извините, если это очень простой вопрос, но я довольно новичок в C++, и у меня возникают проблемы с проектом, над которым я работаю.Чтение из ifstream несколько раз
Часть этого проекта включает в себя запись информации об объекте в файл .txt и возможность чтения этого файла .txt для загрузки в объект. (В этом случае информация записывается, а не сам объект, так что кто-то может легко редактировать .txt для изменения объекта).
Функции Я звоню, чтобы прочитать из файла .txt выглядит следующим образом:
void Room::load(ifstream& inFile)
{
string garbage;
string str;
inFile >> garbage >> garbage >> mId;
inFile >> garbage; getline(inFile, mName);
inFile >> garbage; getline(inFile, mDesc);
loadVec(garbage, inFile, mExits);
}
«мусор» используется, чтобы избавиться от дескрипторов в .txt, чтобы помочь пользователю.
Объект типична помещение должно выглядеть следующим образом:
Room ID: 2
Name: Foyer
Description: The player can enter here from the kitchen.
Exits: 3 4
Моя проблема возникает, когда я пытаюсь загрузить несколько номеров. Первая комната будет загружаться отлично, но любая последующая комната не будет правильно загружаться.
Я бы по крайней мере ожидал, что он потерпит неудачу таким образом, что первая комната в файле .txt будет загружена повторно, но это не так.
Я был бы очень благодарен за любую помощь, которую мог бы предложить любой человек, заранее.
Edit: Сейчас я загружаю номера, используя следующий код:
if (inFile)
{
//Assign data to objects
room0.load(inFile);
room1.load(inFile);
}
В этом случае room0 ветров с данными первой комнаты в .txt файла, но room1 остается неизменным с исключение из-за того, что его выходы очищены по какой-либо причине.
Тестирование программы на данный момент дает следующее:
BEFORE LOAD
ID= -1
NAME= Nowhere
DESC= There's nothing here.
Exits= -1
ID= -1
NAME= Nowhere
DESC= There's nothing here.
Exits= -1
AFTER LOAD
ID= 1
NAME= Kitchen
DESC= This is the first room the player will see.
Exits= 2 3 5 6
ID= -1
NAME= Nowhere
DESC= There's nothing here.
Exits=
Press any key to continue . . .
Эти номера является room0 и room1 соответственно до и после нагрузки.
Вот что функция loadVec выглядит следующим образом:
//Loads consecutive integers from inFile, saving them to vec
void loadVec(string& garbage, ifstream& inFile, vector<int>& vec)
{
int num;
vec.clear();
inFile >> garbage >> num;
vec.push_back(num);
while (inFile)
{
inFile >> num;
vec.push_back(num);
}
vec.erase(vec.begin() + vec.size() - 1);
}
И неотредактированным .txt файл, из которого программа должна быть нагрузка:
Room ID: 1
Name: Kitchen
Description: This is the first room the player will see.
Exits: 2 3 5 6
Room ID: 2
Name: Foyer
Description: The player can enter here from the kitchen, they can exit to the rooms with the IDs listed as 'Exits'.
Exits: 3 4
Room ID: 3
Name: Bathroom
Description: This is the third room.
Exits: 4
Приведенный выше код не загружает выходы. Если это не проблема, я думаю, вам нужно показать больше кода. В частности, вам нужно показать * loop *, где вы пытаетесь загрузить более одной комнаты. – john
- информация других комнат также хранится в функции загрузки? вы пытались закрыть файл после его записи и снова открыть его для чтения? –
Возможно ли это с функцией 'loadVec'? Как вы называете эту функцию? Не могли бы вы показать какой-то контекст, как вы его используете? А вы пробовали переходить через код, по очереди, в отладчик? –