我面临问题,因为我的编译器显示错误“请求成员x在某个结构或联合的东西”请帮忙,因为我很困惑。
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float x;
float y;
} vertex;
int main()
{
int *p, T, N, i, j;
printf("enter the number of inputs required\n");
scanf("%d", &T);
printf("enter the number of polygons\n");
scanf("%d\n", &N);
p = (int *) malloc(N*sizeof(int));
for(i = 0; i < N; i++)
{
printf("enter the number of vertices of the %dth polygon\n");
scanf("%d", p + i);
}
vertex *q[N];
for(i = 0; i < N; i++)
{
q[i] = (vertex *) malloc(*(p + i) * sizeof(vertex));
for(j = 0; j < *(p + i); j++)
{
printf("enter the x coordinate\n");
scanf("%f", &(*(q[i]+j).x)); /*here the error is shown*/
printf("enter the y coordinate\n");
scanf("%f", &(*(q[i]+j).y));
}
}
return 0;
}
答案 0 :(得分:1)
scanf("%f",&(*(q[i]+j).x));
有很多问题。让我们把它们拿出来:
q[i]
是vertex *
,因为q
是vertex *
的数组。没关系。
q[i] + j
是内存中q之后的j
顶点指针的地址。如果q[i]
中的指针本身是数组的成员,则可能没问题。实际上,您正在为q[i]
分配malloc块。但是请注意,由于指针加上一个int会产生一个指针,因此您没有获得vertex
,而是另一个vertex *
。
(q[i] + j).x
无效,因为x
是vertex
的成员,而我们没有其中之一。你需要
(q[i] + j)->x
或
(*(q[i] + j)).x
或
q[i][j].x
(请记住,a[i]
表示*(a+i)
)。
然后你最终可以获取scanf的地址。