声明缺少结构时出错

时间:2015-06-12 19:36:36

标签: c

我面临问题,因为我的编译器显示错误“请求成员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;
}

1 个答案:

答案 0 :(得分:1)

scanf("%f",&(*(q[i]+j).x));

有很多问题。让我们把它们拿出来:

q[i]

vertex *,因为qvertex *的数组。没关系。

q[i] + j

是内存中q之后的j顶点指针的地址。如果q[i]中的指针本身是数组的成员,则可能没问题。实际上,您正在为q[i]分配malloc块。但是请注意,由于指针加上一个int会产生一个指针,因此您没有获得vertex,而是另一个vertex *

(q[i] + j).x

无效,因为xvertex的成员,而我们没有其中之一。你需要

(q[i] + j)->x

(*(q[i] + j)).x

q[i][j].x

(请记住,a[i]表示*(a+i))。

然后你最终可以获取scanf的地址。