奇怪的printf方程

时间:2012-03-31 18:04:20

标签: c pointers printf

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

    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) 输出: - 测试0 2 -1

为什么? 编辑:


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

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);

我已经检查过Quicksort,它可以正常工作。函数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

1 个答案:

答案 0 :(得分: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