fscanf返回废话值

时间:2018-12-03 03:22:25

标签: c++ .obj

我正在尝试从本教程之后的文件中读取内容: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-7-model-loading/

问题是当我尝试复制代码并执行fscanf时,值始终会初始化为疯狂值,例如-848228281或类似的值。 第一次读取顶点的值有效,但不读取面的值。

while (!(feof(fp)))
{
    read = fscanf(fp, "%c", &ch);       
    if (/*read == 4 && */ch == 'v')
    {
        // this works
        read = fscanf(fp, "%f %f %f\n", &x, &y, &z);
        vertices.push_back(vector3(x, y, z));
        //glVertex3f(x, y, z);
    }
    else if (ch == 'f')
    {
        GLint vertexIndex[3], uvIndex[3], normalIndex[3];

        // this line below does not work
        int matches = fscanf(fp, "%d/%d/%d %d/%d/%d %d/%d/%d\n",
            &vertexIndex[0], &uvIndex[0], &normalIndex[0],
            &vertexIndex[1], &uvIndex[1], &normalIndex[1],
            &vertexIndex[2], &uvIndex[2], &normalIndex[2]);
        if (matches != 9)
        {
            printf("Incompatible file!");
            return;
        }
    }
}

我的obj文件与本教程中的文件相同。

1 个答案:

答案 0 :(得分:0)

当代码遇到读取的数据行时,该代码将进入else if (ch == 'f') { ... }子句

s off

因为有'f'个字符。但是随后的读取数值的尝试将失败(出于明显的原因)。