繁体   English   中英

fstream不是逐个字符而是整数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM