gpt4 book ai didi

c - 奇怪的 printf 方程

转载 作者:行者123 更新时间:2023-11-30 14:25:49 28 4
gpt4 key购买 nike

我有 2 个指向一些 Point 结构的指针。我想计算两点之间的距离(我不需要计算它的根)所以我有这个:

    w[0]=X[l];
w[1]=X[l+1];
d=m(w[0]->x-w[1]->x)+m(w[0]->y-w[1]->y);
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x);

输入:X[l] = (0,1),X[l+1] = (2,0)输出:--TEST 0 2 -1

这是为什么呢?编辑:

<小时/>

这是函数 find 的一部分,该函数查找两个点之间距离最小的点。我主要有这个:

X=(Punkt**)malloc(sizeof(Punkt*)*n);
Y=(Punkt*)malloc(sizeof(Punkt)*n);
int x,y;
for(int i=0;i<n;++i) {
scanf("%d %d",&x,&y);
Y[i].x=x;
Y[i].y=y;
X[i]=(Punkt*)malloc(sizeof(Punkt*));
X[i]=&Y[i];
}
Quicksort(X,0,n-1);
Punkt **wynik=find(0,n-1);
printf("%d %d\n%d %d",wynik[0]->x,wynik[0]->y,wynik[1]->x,wynik[1]->y);

我检查过快速排序,它应该可以正常工作。函数 m: #define m(a) ((a)*(a)) 只发现函数在那部分有bug。这可行,但我不想为每个坐标创建变量。

int trash1=w[0]->x;
int trash2=w[1]->x;
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x,trash1-trash2);

输入:2 点 (0,1) (2,0)输出:--测试 0 2 -1 -2

最佳答案

我正在尝试重现您的经历。使用这个我得到 0 - 2 = - 2 结果:
(换句话说,无法重现。)

#include <stdio.h>
#include <stdlib.h>

#define m(a) ((a)*(a))

typedef struct pkt {
int x;
int y;
} Punkt;

int main(void)
{
Punkt **X;
Punkt *Y;
Punkt *w[2];
int x, y;
int n = 2;
int i;

X = malloc(sizeof(Punkt*) * n);
Y = malloc(sizeof(Punkt) * n);

printf("Enter 2 integer point pairs: ");
for(i = 0; i < n; ++i) {
scanf("%d %d", &x, &y);
Y[i].x = x;
Y[i].y = y;
X[i] = &Y[i];
}

i = 0;
w[0] = X[i];
w[1] = X[i + 1];
i = m(w[0]->x - w[1]->x) + m(w[0]->y - w[1]->y);

printf("D: m(%d - %d) + m(%d - %d) = "
"%d + %d = "
"%d\n",
w[0]->x, w[1]->x, w[0]->y, w[1]->y,
m(w[0]->x - w[1]->x), m(w[0]->y - w[1]->y),
i);

printf("TEST: %d - %d = %d\n",
w[0]->x,
w[1]->x,
w[0]->x - w[1]->x);

free(X);
free(Y);

return 0;
}

示例:

$ ./pq
Enter 2 integer point pairs: 0 1 2 0
D: m(0 - 2) + m(1 - 0) = 4 + 1 = 5
TEST: 0 - 2 = -2

关于c - 奇怪的 printf 方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com