c++ - fstream不是逐个字符而是整数
问题描述
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();
}
我不会发布我的整个地图文件,但布局是这样的
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 中的一个函数,用于转换字符串,如atoi("532532")
.
如果您想将单曲转换char
为int
您可以这样做。
const int number = c - '0';
推荐阅读
- javascript - 如何使用php创建插入js的谷歌地图api标记
- php - 搜索结果计数但未正确显示 - Wordpress
- java - MockServer 如何实现 JUnit 双向 TLS 身份验证?
- c# - 简化 If 语句的返回
- python - 如果我想删除“,”之前的所有值,如何从整个列中删除部分字符串?
- javascript - 在 .on('close') 分配更新中更新后对象的数组为空
- r - 在R中计算二进制光栅图像中的对象
- reactjs - React typescript 属性“类型”的类型不兼容
- java - 如何在 for 循环中声明 int 变量?
- python - 在VS Code中打开某个文件夹时触发其他程序打开