gpt4 book ai didi

c++ - 使用 getline 从文件中读入一个字符串,然后将该字符串推回一个 vector

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:40 26 4
gpt4 key购买 nike

好吧,总的来说,我对编码还很陌生,所以我可能只是遗漏了一些对其他人来说显而易见的东西。话虽这么说,但我只是想从文本文件中打印一张简单的 map ,但我想先将信息加载到 vector 中。问题是我似乎只加载最后一行。我正在使用 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;
}

这是我要打印的 map ,它正是它在 txt 文件中的写法:

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

相反,我得到的是:

##########

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

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

最佳答案

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

这个循环有一个空的受控语句。因此循环读取行但不对它们做任何事情,直到循环终止,此时只有最后读取的行将被放入 vector 。

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

关于c++ - 使用 getline 从文件中读入一个字符串,然后将该字符串推回一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com