首页 > 解决方案 > 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 坐标,并跳过“,”。

如果有我忽略的东西,请提前道歉,但是两个头脑更好,然后一个任何答案都将非常感激。

标签: c++fstream

解决方案


您的代码调用未定义的行为,因为它atoi期望一个以空字符结尾的字符串,这&c显然不是,它是一个指向单个字符的指针。

为什么首先需要atoi?它是 C 中的一个函数,用于转换字符串,如atoi("532532").

如果您想将单曲转换charint您可以这样做。

const int number = c - '0';

推荐阅读