从文件流中读取值并将它们存储到可变大小的数组中 - OpenGL和C.

时间:2009-11-28 16:40:25

标签: c arrays file-io filestream

我正在尝试阅读以下文件(评论不在原文中):

Tetra.tri


4 4 //顶点数& tot三角形

0.693361 0.693361 0.693361 //顶点坐标

0.693361 -0.693361 -0.693361

-0.693361 -0.693361 0.693361

-0.693361 0.693361 -0.693361

3 1 2 3 //要显示的三角形(前面的3指定为三角形)

3 0 3 2

3 0 1 3

3 0 2 1


我正在尝试使用动态数组,因为我需要打开其他文件,因为我使用顶点数组绘制到屏幕。

我得到了第一个正确的值(根据上面的文件,vertcount和tricount分别为4和4)但是我之后做错了。

以下是代码:


void main(){

struct Vertex           // Vertex Structure
{
    float x,y,z;
};

struct Triangle         // Triangle Structure
{
    struct Vertex vert1, vert2, vert3;
};

int vertcount=0;                    //total number of vertices
int tricount=0;                     // number of triangles to display
int v=0;                                //var to store index value of each vertex
int t=0;                                //var to store index value of each triangle
struct Vertex InstVertex;           // Instantiation of Vertex defined as struct with 3 floats to store coordinates
struct Triangle InstTriangle;       // Instantiation of the Triangle STRUCT
long filesize;
char buffer;

struct Vertex vertArray[v];
struct Triangle triArray[t];

FILE * pmesh;                       // pointer to the mesh file to be opened
pmesh = fopen ("/Users/.../tetra.tri","r");             // Tries to access the file specified. TO BE CHANGED ----> Dialaog window with browse for file function

/ **********读取文件和存储值********** /

fscanf(pmesh, " %i %i ", &vertcount, &tricount);        //read from file and assign the first two values: number of Vertices and Triangles      

vertArray[v] = malloc(vertcount*(sizeof(struct InstVertex)));       // Array of vertexes - space allocated = total number of vertices * the size of each Vertex
triArray[t] = malloc(tricount*(sizeof(struct InstTriangle)));       // Array of triangles

int i=0, j=0;       // Temp variables for for loops

for (i=0; i<=vertcount; i++){
    fscanf(pmesh, "%d %d %d", &InstVertex.x, &InstVertex.y, &InstVertex.z);     //read file and store coordinates in
    vertArray[v]=InstVertex;
    v++;
}   

int check=0;

for (j=0; j<=tricount; j++){
    fscanf(pmesh, "%i %i %i %i", &check, &InstTriangle.vert1, &InstTriangle.vert2, &InstTriangle.vert3);
    triArray[t]=InstTriangle;
    t++;
}

fclose(pmesh);

/ **************************************** /

glutMainLoop();
return 0;

}


在我犯的错误中,还有分配数组内存的方式,因为我没有得到正确的值。

我在读取循环和数组声明中找不到错误。 这也是在数组中存储值的正确方法吗?

提前谢谢你, 瓦莱里奥

1 个答案:

答案 0 :(得分:0)

通过将第一个for循环中读取的值从%d更改为浮点数(%f),我已经解决了读取数值并为数组赋值的问题,这给了我正确的值。

然而,尽管将malloc调用改为:

vertArray[v] = (struct Vertex) malloc(vertcount*(sizeof(struct Vertex)));

triArray[t] = (struct Triangle) malloc(tricount*(sizeof(struct Triangle)));

其中v和t已经有值(在这种情况下为4和4)因为我编辑了上面的代码还包括两个调用:

v=vertcount;
t=tricount;

但我仍然得到以下错误:

错误:请求转换为非标量类型!

任何想法为什么?

谢谢!