У меня есть графическая программа, в которой есть некоторые вычисления.
он не дает никаких ошибок, но после запуска программы он дает ошибку деления 6/4.
Кто-нибудь может мне помочь с этим?
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
struct face
{
int **vertices;
};
void main()
{
int gd = DETECT,gm;
int x, y, z, i, j, k, m, n;
struct face *f_3d, *f;
FILE *fp;
char c;
initgraph(&gd, &gm, "d:/tc/bgi");
fp=fopen("cube.txt", "r");
clrscr();
if(fp == NULL)
{
printf("\nFile doesn't exist");
exit(0);
}
fscanf(fp, "%d", &m);
fseek(fp, 1, SEEK_CUR); //no of faces
fscanf(fp, "%d", &n); //no of vertices for each face
printf("\n%d %d", m, n);
f = (struct face *) malloc(sizeof(m*sizeof(struct face)));
f_3d = (struct face *) malloc(sizeof(m*sizeof(struct face)));
for(i = 0; i < m; i++)
{
f[i].vertices = (int **) malloc(n*sizeof(int));
f_3d[i].vertices = (int **) malloc(n*sizeof(int));
}
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
{
f[i].vertices[j] = (int *) malloc(2*sizeof(int));
f_3d[i].vertices[j] = (int *) malloc(3*sizeof(int));
}
for(i = 0; i < m; i++) //for every face
for(j = 0;j < n; j++) // for every vertex in the face
{
fscanf(fp, "%d", &f_3d[i].vertices[j][0]); //read x coord
fseek(fp, 1, SEEK_CUR); //to skip comma
fscanf(fp, "%d", &f_3d[i].vertices[j][1]); //read y coord
fseek(fp, 1, SEEK_CUR);
fscanf(fp, "%d" ,&f_3d[i].vertices[j][2]); //read y coord
fseek(fp, 1, SEEK_CUR);
}
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
{
x=f_3d[i].vertices[j][0];
y=f_3d[i].vertices[j][1];
z=f_3d[i].vertices[j][2];
f[i].vertices[j][0]=(int)x/z;
f[i].vertices[j][1]=(int)y/z;
}
for(i = 0; i < 6; i++)
{
for(j = 0; j < 3; j++)
line(f[i].vertices[j][0], f[i].vertices[j][1], f[i].vertices[j+1][0], f[i].vertices[j+1][1]);
line(f[i].vertices[j][0], f[i].vertices[j][1], f[i].vertices[0][0], f[i].vertices[0][1]);
}
getch();
}
РЕДАКТИРОВАТЬ: Добавлена дополнительная информация из комментариев:
Все значения массива, присвоенные x
и y
, являются целочисленными значениями. Таким образом, окончательное назначенное значение также должно быть только целым числом. Итак, я хотел знать причину ошибки деления.
cube.txt
содержит вершины вида 400,200,2
, 300,400,2
и т. Д. Я запускаю эту программу в Turbo C. Я делаю 400/2
и 200/2
(где x=400
, y=200
и z=2
) и присвоение его f[i].vertices[j][0]=x/z
и f[i].vertices[j][1]=y/z?
. Там нет ошибки как таковой. Но когда программа запускается, вывод не виден. Я ожидаю увидеть вывод массива f[i].Vertices
.