2012-03-31 54 views
0

我有2個指向某些點結構的指針。我想要計算2點之間的距離(我不需要計算其根),所以我有這樣的:奇怪的printf方程

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 [1] =(0,1),X [L + 1] = (2,0) 輸出: - 測試0 2 -1

這是爲什麼? 編輯:


這是一部分功能找到它發現2點與它們之間的最小距離。在主要我有這個:

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) 輸出:--test 0 2 -1 -2

+1

你能提供一些更多的背景? 「w」和「X」在哪裏定義?你怎麼知道數組中的值是你認爲的值? – templatetypedef 2012-03-31 18:08:22

+0

我的猜測是:**未定義的行爲**!如果您提供有問題的類型並在代碼中使用更多空間,可能會更容易發現。 – pmg 2012-03-31 18:08:56

+0

請學習使用空格(和更好的變量名稱)。 – jamesdlin 2012-03-31 18:09:37

回答

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