使用getline从文件读取到字符串,然后将该字符串推回到向量上

时间:2016-04-18 04:17:59

标签: c++ vector 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;
}

这是我试图打印的地图,并且正是它在txt文件中的编写方式:

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

相反,我得到的是:

##########

所以是的...不知道为什么它只读最后一行。我已经看到很多getline用于打印整个文件的例子。我只是不知道为什么我无法将它全部推回到矢量中。我的打印功能检查向量的大小,我总是得到1.所以我非常确定我的打印功能正在工作(或者至少不会导致这个问题哈哈)

无论如何,非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:2)

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();
}