C 指针和结构

C 指针和结构,c,function,pointers,types,structure,C,Function,Pointers,Types,Structure,我想写一个代码,扫描X和Y变量,并将其放入一个结构中(带指针),然后打开一个函数,它应该在其中计算点到坐标原点之间的距离(不知道英文名称sry) #包括 #包括 类型定义结构 { int x; int-y; 双Abstrand; }蓬克达滕; 无效abstandsberechnung(punktdaten*punkt,int N); int main() { punktdaten*punkt; int N; 蓬克达滕·希尔夫; printf(“我的名字是:\n”); scanf(“%d”和“&N

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

#包括
#包括
类型定义结构
{
int x;
int-y;
双Abstrand;
}蓬克达滕;
无效abstandsberechnung(punktdaten*punkt,int N);
int main()
{
punktdaten*punkt;
int N;
蓬克达滕·希尔夫;
printf(“我的名字是:\n”);
scanf(“%d”和“&N”);
如果(nx),&(punkt->y));
}
Abstrandsberechnung(和punkt,N);
}
其他的
printf(“zuvielepunkte!”);
}
无效abstandsberechnung(punktdaten*punkt,int N)
{
对于(inti=0;iabstand=sqrt(punkt->x*punkt->x*punkt->y*punkt->y);
}
我不知道如何扫描变量,如何用结构和指针计数。 它说在第29行中有一个不兼容的指针类型,在第12行中它期望“punktdaten*”但它是“punktdaten**”


你能帮我一下吗?

你正在取消对未初始化指针的引用
punkt
。它不应该是指针,它应该是数组。然后你每次都需要通过
main()
AbstandsBerechnong()
中的循环对它进行索引

int main()
{
int N;
蓬克达滕·希尔夫;
printf(“我的名字是:\n”);
scanf(“%d”和“&N”);

如果(N)如果您正在查找到(0,0)的距离,那么英文名称确实是origin。要修复编译错误,请删除
absandsberechnung(&punkt,N);
-但是,您的代码将在
scanf(%d%d,&(punkt->x),&(punkt->y))中调用未定义的行为;
因为
punkt
从未初始化为指向任何东西(从而解决此问题),您可能需要执行
punktdaten*punkt=malloc(sizeof(punktdaten))
main
的开头,而不是您当前拥有的,并且假设您不想泄漏内存,
main
的末尾释放它。如果您能够澄清
hilf
的用途,这也会很有帮助,因为它似乎没有被使用。hilf是供以后在结构之间交换的。将距离原点较远的结构放在列表中,距离较低的结构放在较高的位置。(我将该部分删掉,这样它会发生冲突,但忘了删除hilf)
#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);
}
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);
}