![](/img/trans.png)
[英]Reading using fstream character by character and passing the fstream to a function for further reading?
[英]fstream not reading character by character but whole numbers
void Map::LoadMap(std::string path, int sizeX, int sizeY) {
char c;
std::fstream mapFile;
mapFile.open(path);
int srcX, srcY;
for(int y = 0; y < sizeY; y++) {
for(int x = 0; x < sizeX; x++) {
mapFile.get(c);
srcY = atoi(&c) * 32;
mapFile.get(c);
srcX = atoi(&c) * 32;
ks::Game::AddTile(srcY, srcX, x * 32, y * 32);
std::cout << "X: " << srcX << " Y:" << srcY << std::endl;
mapFile.ignore();
}
}
mapFile.close();
}
我不会发布我的整个 map 文件,但布局是这样的
00,01,02,03,44,00,00,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
我只是好奇我的系统是 Mac,我在 windows 上做了一个类似的程序,它逐个字符地读取此代码,但是在 XCode 上,它是按整数而不是逐个字符读取文件,而不是获取第一个数字示例 4 并将其乘以 32 它是抓取 44 然后将其乘以 32。
我只是希望第一个数字用作 Y 坐标,第二个数字用作 X 坐标,并跳过“,”。
如果有我忽略的东西,请提前道歉,但是两个头脑更好,然后一个任何答案都将非常感激。
您的代码调用未定义行为,因为atoi
需要一个以空字符结尾的字符串,而&c
显然不是,它是指向单个字符的指针。
为什么首先需要atoi
? 它是来自 C 的 function ,用于转换atoi("532532")
类的字符串。
如果您想将单个char
转换为int
,您可以这样做。
const int number = c - '0';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.