Использование getline для чтения из файла в строку, а затем нажатие этой строки обратно на вектор

Итак, я все еще довольно новичок в программировании в целом, поэтому я могу просто упустить что-то, что очевидно для всех остальных. При этом я пытаюсь просто распечатать простую карту из текстового файла, но сначала хочу загрузить информацию в вектор. Проблема в том, что я загружаю только последнюю строку. Я использую curses для печати и всего такого.

Вот код LevelControl прямо сейчас, все, что у меня есть, это функция загрузки и:

void LevelControl::loadLevel(string levelName)
{
    ifstream level;
    string transferLine;
    level.open(levelName);
    if(level.fail()){perror("Level");}
    while(getline(level, transferLine));
    {
        int counter = 0;
        loadedLevel.push_back(transferLine);
        printw("\n");
        counter++;
        transferLine.clear();
    }
}

void LevelControl::printLevel()
{
    int mapSizeX = loadedLevel.size();
    string loadedString;
    for(int i = 0; i < mapSizeX; i++ )
    {
        loadedString = loadedLevel[i];
        mapSizeY = loadedString.size();
        printw("%s \n", loadedString.c_str());
        refresh();
        loadedString.clear();
    }
}

Это мой основной()

int main()
{
    LevelControl currentLevel;
    initscr();
    currentLevel.loadLevel("level.txt");
    bool loopGame = true;
    while(loopGame)
    {
        currentLevel.printLevel();
        getch();
    }
    endwin();
    return 0;
}

Это карта, которую я пытаюсь распечатать, и именно так она написана в текстовом файле:

#########*
#........#
#........#
#........#
#........#
#........#
#........#
#........#
#........#
##########

Вместо этого все, что я получаю, это:

##########

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

В любом случае любая помощь очень ценится!!


person FictionXVI    schedule 18.04.2016    source источник
comment
Дайте нам весь код и как выглядит файл   -  person STF    schedule 18.04.2016
comment
Как вы его печатаете?   -  person GMichael    schedule 18.04.2016
comment
Я просто отредактировал его, чтобы показать все, что у меня есть на данный момент.   -  person FictionXVI    schedule 18.04.2016
comment
Что делает refresh();?   -  person GMichael    schedule 18.04.2016
comment
Каково значение loadedLevel.size()?   -  person John Zwinck    schedule 18.04.2016
comment
он возвращается как один (1)   -  person FictionXVI    schedule 18.04.2016
comment
Есть ли loadedLevel.size() == 1 даже в конце вашей функции loadLevel()? Если это так, попробуйте выполнить эту функцию, чтобы увидеть, что не так.   -  person John Zwinck    schedule 18.04.2016
comment
Пожалуйста, изучите правила публикации: Вы должны извлечь минимальный, но полный пример, чтобы каждый мог воспроизвести вашу проблему.   -  person Ulrich Eckhardt    schedule 18.04.2016


Ответы (1)


while(getline(level, transferLine).good());

Этот цикл имеет пустой контролируемый оператор. Таким образом, цикл читает строки, но ничего с ними не делает, пока не завершится цикл, когда в вектор будет помещена только последняя прочитанная строка.

while(getline(level, transferLine))//; remove this semi-colon
{
        int counter = 0;//might want to consider the purpose of this also
        loadedLevel.push_back(transferLine);
        printw("\n");
        counter++;
        transferLine.clear();
}
person Biruk Abebe    schedule 18.04.2016
comment
Спасибо чувак! также счетчик был способом, которым я проверил, чтобы увидеть, что он работает только один раз. - person FictionXVI; 18.04.2016