Является ли мой файл ввода причиной моего "экземпляра 'std :: logic_error'"? - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь выполнить какой-либо ввод файла для чтения в аспектах комнат переменных, которые затем будут преобразованы в объекты (комната - это объект, а проходы север, восток, юг и запад - объекты).

Файл, из которого я читаю, выглядит следующим образом:

2 3
The Start,-,+,red_key,-,axe blue_key
The Landing,-,+,-,+,
Master Bedroom,-,-,-,+,red_key
The Kitchen,red_key,+,-,-,
The Hall,-,+,-,+,
The Exit!,-,+,-,+,

Комнаты будут помещены в двумерный массив. Я правильно прочитал количество строк и столбцов в файле, но к концу каждой строки для комнат все становится ужасно. Вот что я пытался сделать:

char discard = ',';
string roomName;

string nPassage;
string ePassage;
string sPassage;
string wPassage;

char lastChar;

string listOfItems;

for(int i = 0; i < this->rows; i++)
{
    roomName.clear();
    listOfItems.clear();

    for(int j = 0; j < this->columns; j++)
    {
       getline(cinMaze, roomName, discard); cout << roomName << endl;
       getline(cinMaze, nPassage, discard); cout << nPassage << endl;
       getline(cinMaze, ePassage, discard); cout << ePassage << endl;
       getline(cinMaze, sPassage, discard); cout << sPassage << endl;
       getline(cinMaze, wPassage, discard); cout << wPassage << endl;
       cinMaze >> lastChar; cout << "\"" << lastChar << "\"";

       room roomInMaze(roomName, createPassageWay(nPassage), createPassageWay(ePassage), createPassageWay(sPassage), createPassageWay(wPassage));
       theMaze[i][j] = roomInMaze;

       if (lastChar != '\n')
       {
           cinMaze.putback(lastChar);

           getline(cinMaze, listOfItems);
           theMaze[i][j].addItem(listOfItems);
       }
    }
}

Слова после последней запятой в некоторых строках файла - это предметы, необходимые для дверей, которые игрок будет добывать, когда входит в комнату. Я думал, что последняя запятая была удалена из-за того, как я написал программу, и тогда я смогу проверить наличие \ n и либо перейти, либо убрать обратно любой символ, чтобы я мог прочитать список необходимых элементов.

Все операторы cout существуют для целей тестирования ... Вот что я получаю, когда тестирую это:

The Start
-
+
red_key
-
"a"The Landing
-
+
-
+
"M"The Kitchen
red_key
+
-
-
"T"The Exit!
-
+
-
+
"T"The Exit!
-
+
-
+
"T"The Exit!
-
+
-
+

Что я не понимаю в отношении файлового ввода-вывода или чего-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...