gpt4 book ai didi

c++ - 用于将文件中的字符串读入 3D 数组的 For 循环

转载 作者:行者123 更新时间:2023-11-30 01:29:27 25 4
gpt4 key购买 nike

我的一个函数有问题,我正在开发一个简单的图 block map 编辑器,我正在尝试实现一个 3D 数组来跟踪图 block (x,y, layer)。在此之前,我有一个一维数组,其中所有的图 block 都按顺序列出:

bool Map::OnLoad(char* File) {
TileList.clear();
FILE* FileHandle = fopen(File, "r");
if(FileHandle == NULL) {
return false;
}

for(int Y = 0;Y < MAP_HEIGHT;Y++) {
for(int X = 0;X < MAP_WIDTH;X++) {
Tile tempTile;

fscanf(FileHandle, "%d:%d ", &tempTile.TileID, &tempTile.TilePassage);

TileList.push_back(tempTile);
}
fscanf(FileHandle, "\n");
}
fclose(FileHandle);
return true;
}

这基本上是从文件中读取字符串,如下所示:

2:1 1:0 3:2...

第一个数字表示 tileID,第二个表示 Tile passability。 上述功能有效。我的 3D 数组也构造正确,我用简单的赋值和调用值来测试它们。 给我带来问题的函数如下(请注意添加了数字 2,即 OnLoad2(),这样我可以在原型(prototype)运行之前保持旧变量和函数不变):

bool Map::OnLoad2(char* File) {
TileList2.clear();
FILE* FileHandle2 = fopen(File, "r");
if(FileHandle2 == NULL) {
return false;
}

for(int Y = 0;Y < MAP_HEIGHT;Y++) {

for(int X = 0;X < MAP_WIDTH;X++) {
Tile tempTile;
fscanf(FileHandle2, "%d:%d ", &tempTile.TileID, &tempTile.TilePassage);

TileList2[X][Y][0] = tempTile;
}
fscanf(FileHandle2, "\n");
}
fclose(FileHandle2);
return true;
}

虽然此函数不会触发编译器报告任何错误,但一旦应用程序启动,它就会卡住并崩溃。有关其他信息,MAP_WIDTH 和 MAP_HEIGHT 均设置为 40,并且 3D 数组的构造如下:

TileList2.resize(MAP_HEIGHT);
for (int i = 0; i < MAP_HEIGHT; ++i) {
TileList2[i].resize(MAP_WIDTH);
for (int j = 0; j < MAP_WIDTH; ++j)
TileList2[i][j].resize(3);
}

如果你能指出我需要修复什么,我将不胜感激,据我所知,我一定是弄乱了 for 循环结构,因为 3D 数组初始化并正常工作。感谢您的帮助!

最佳答案

TileList2.clear();

此行重新初始化 TileList2,因此它返回到零长度 vector 。删除该行,您可能会没事。

关于c++ - 用于将文件中的字符串读入 3D 数组的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889545/

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