【问题标题】:Using getline to read from a file into a string and then pushing that string back on a vector使用 getline 从文件中读取字符串,然后将该字符串推回向量上
【发布时间】:2016-04-18 04:17:58
【问题描述】:

好吧,总的来说,我对编码还很陌生,所以我可能只是遗漏了一些对其他人来说显而易见的东西。话虽如此,虽然我试图从文本文件中打印一个简单的地图,但我想先将信息加载到矢量中。问题是我似乎只加载最后一行。我正在使用诅咒进行打印等等。

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

这是我的 main()

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

这是我要打印的地图,它在 txt 文件中的写法是这样的:

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

我得到的只是:

##########

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

非常感谢任何帮助!

【问题讨论】:

  • 给我们所有的代码和文件的样子
  • 如何打印?
  • 我刚刚编辑了它以显示我到目前为止所拥有的一切
  • refresh(); 是做什么的?
  • 请阅读发布指南:您应该提取一个最小但完整的示例,以便每个人都可以重现您的问题。

标签: c++ vector getline


【解决方案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();
}

【讨论】:

  • 谢谢你!计数器的东西也是我测试的一种方式,它只运行一次。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2017-03-31
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多