整数被设置为任意值

Integer being set to an arbitrary value

本文关键字:任意值 设置 整数      更新时间:2023-10-16

在.mtl文件中读取的类中,我有一个整数值,该值存储正在读取的材料的当前索引,并且在执行ifstream.getline()之后,该值被设置为一个非常大的数字。有人知道为什么会发生这种情况以及如何解决吗?

std::ifstream inf(fileName);
int mtlcount = -1;
if(!inf)
{
    std::cout << "File could not be opened";
    return 1;
}

while(!inf.eof())
{
    char line[40];
    inf.getline(line, 40);
//mtlcount set to a random value here
//more code
}

编辑:该项目正在使用DirectX 11,和mtcount只是被设置为一个非常高的值,我不知道它是如何确定的,所以也许随机不是正确的词。

int Parser::readMtlFile(std::string fileName, std::vector<Material>* materials)
{
std::ifstream inf(fileName);
int mtlcount = -1;
if(!inf)
{
    std::cout << "File could not be opened";
    return 1;
}

while(!inf.eof())
{
    char line[40];
    inf.getline(line, 40);
    if(line[0] == 'n' && line[1] == 'e' && line[2] == 'w' && line[3] == 'm' && line[4] == 't' && line[5] == 'l')
    {
        mtlcount++;
        std::string mtlName;
        Material mtl;
        materials->push_back(mtl);
        int i = 7;
        while(line[i] != 'n' && i < 40)
        {
            mtlName += line[i];
            i++;
        }
        materials->at(mtlcount).name = mtlName;
    }
    if(line[0] == 'K' && line[1] == 'a')
    {
        float r, g, b;
        sscanf_s(line, "Ka %f %f %f", &r, &g, &b);
        materials->at(mtlcount).ambient = XMFLOAT4(r, g, b, 1.0);
    }
    if(line[0] == 'K' && line[1] == 'd')
    {
        float r, g, b;
        sscanf_s(line, "Kd %f %f %f", &r, &g, &b);
        materials->at(mtlcount).diffuse = XMFLOAT4(r, g, b, 1.0);
    }
    if(line[0] == 'K' && line[1] == 's')
    {
        float r, g, b;
        sscanf_s(line, "Ka %f %f %f", &r, &g, &b);
        materials->at(mtlcount).specular = XMFLOAT4(r, g, b, 1.0);
    }
}
}

您可能需要阅读sscanf_s的参考资料,因为您没有正确使用它。这意味着你的代码有未定义的行为,这意味着你有任何行为可能是因为