【发布时间】:2014-01-28 18:50:59
【问题描述】:
我已经制作了一个“地图”数组,并试图从一个“地图”文件中填充它。创建时,我将值“0”分配给数组的每个元素,但“地图”文件包含以下内容:
地图:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我使用 'loadMap()' 加载地图
加载地图():
void room::loadMap()
{
int x=0;
int y=0;
string line;
ifstream mapFile(NAME + "_MAP.txt");
while(!mapFile.eof())
{
for(int i=0; i<cellsY; i++)
{
getline(mapFile,line,'\n');
for(int j=0; j<cellsX; j++)
{
getline(mapFile,line,' ');
map[(cellsX*j) + cellsY] = atoi(line.c_str());
};
};
}
y = 10;
x = 15;
for(int i=0; i<y; i++)
{
cout << endl;
for(int j=0; j<x; j++)
{
cout << map[(x*j) + y];
};
};
}
在此示例中,元素仍分配给“0”,但我正在尝试模仿地图文件布局。
【问题讨论】:
-
在 StackOverflow 中搜索“正在读取文件 eof”。
-
你为什么使用
getline?这看起来是使用file >> variable的好案例。 -
你的文件真的打开了吗?
-
@ThomasMatthews 外部循环中的
getline是合理的,如果他想确保每一行都在单独的行上。不使用他在外循环中读到的那行不太好。并且像他那样使用getline,然后是atoi,也不是一个好主意。 (更不用说getline( mapFile, line, ' ' )会一直读取到下一个空格,并且不会在换行符处停止。)