指针和结构

Pointer and structures

我想编写一个代码来扫描 X 和 Y 变量并将其放入一个结构(带指针)中,然后打开一个函数,它应该计算点与坐标原点之间的距离(不知道英文名sry).

#include <stdio.h>
#include <math.h>

typedef struct
  {
    int x;
    int y;
    double abstand;
  }punktdaten;

void abstandsberechnung(punktdaten *punkt,int N);


int main ()
{
  punktdaten *punkt;
  int N;
  punktdaten hilf;
  printf ("Geben sie die Anzahl ihrer Punkt ein:\n");
  scanf ("%d", &N);
  if (N <= 100)             /* Es darf höchstens 100 sein, weil Aufgabenstellung */
    {
      for (int i = 0; i < N; i++)
     {
       printf ("Geben sie die X und Y Koordinaten ihrer %d Punkte ein:", N);
       scanf ("%d%d",&(punkt->x),&(punkt->y));
     }
  abstandsberechnung(&punkt,N);
    }
    else
    printf("Zu viele Punkte!");
}

void abstandsberechnung (punktdaten *punkt,int N)
{
    for(int i=0;i<N;i++)
     punkt->abstand=sqrt(punkt->x*punkt->x*punkt->y*punkt->y);
}

我不知道如何扫描变量以及如何使用结构和指针进行计数。 它说在第 29 行有一个不兼容的指针类型,在第 12 行它期望 "punktdaten *" 但它是 "punktdaten**".

你能帮我吗?

您正在取消引用未初始化的指针 punkt。它不应该是一个指针,它应该是一个数组。然后你需要每次通过 main()abstandsberechnung().

中的循环对其进行索引
int main ()
{
    int N;
    punktdaten hilf;
    printf ("Geben sie die Anzahl ihrer Punkt ein:\n");
    scanf ("%d", &N);
    if (N <= 100)             /* Es darf höchstens 100 sein, weil Aufgabenstellung */
    {
        punktdaten punkt[N];
        for (int i = 0; i < N; i++)
        {
            printf ("Geben sie die X und Y Koordinaten ihrer %d Punkte ein:", N);
            scanf ("%d%d",&(punkt[i].x),&(punkt[i].y));
        }
        abstandsberechnung(punkt,N);
    }
    else
        printf("Zu viele Punkte!");
}

void abstandsberechnung (punktdaten *punkt,int N)
{
    for(int i=0;i<N;i++)
        punkt[i].abstand=sqrt(punkt[i].x*punkt[i].x*punkt[i].y*punkt[i].y);
}