2011-06-30 39 views
0

的,,顯露之後,我已經在代碼中的其他問題:分配一個值的值前一個問題,我在一些代碼的問題改變了循環

i=1; 
double smallest=diff[i][2]; 
int nxtcty; 
for (j=2; j<=n; j++) 
     { 
      if (j!=i && diff[i][j]<smallest) {smallest=diff[i][j]; nxtcty=j;} 
     } 

值nxtcty不改變爲j ..它輸出一個奇怪的數字,我相信這是它的內存位置內容>>'134520820'..出了什麼問題? 預先感謝您...

編輯 進一步調試,這裏的全部代碼..這是一個非常初學者代碼來計算他們的(X,Y)的幾個城市之間的距離座標給出:

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

int main() 
     { 
      int i, j, n; 
////////////// getting the number of cities /////////////////// 
       printf("how many cities are there?\n"); 
       scanf("%d", &n); printf("so there is %d cities\n", n); 
       int x[n]; 
       int y[n]; 
///////////// getting the x coordinates ////////////////////// 
       printf("enter their x coordinates, each followed by return\n"); 
       for (i=0; i<n; i++) 
         { 
          scanf("%d", &x[i]); 
          printf("the %dth city x coordinate is %d\n", i+1, x[i]); 
         } 
///////////// getting the y cordinates ///////////////////// 
       printf("enter their y coordinates, each followed by return\n"); 
       for (i=0; i<n; i++) 
         { 
          scanf("%d", &y[i]); 
          printf("the %dth city y coordinate is %d\n", i+1, y[i]); 
         } 
////////////// showing information /////////////////////// 
       for (i=0; i<n; i++) 
         { 
          printf("city number %d is at (%d,%d)\n", i+1, x[i], y[i]); 
         } 
//////////// get the distances ///////////////// 
double diff[n][n]; 
double h; 
for (i=0; i<n; i++) { 
     for (j=0; j<n; j++) 
      { 
       h=((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); 
       printf("city #%d distance %lf from city #%d\n\n", i+1, sqrt(h), j+1); 
       diff[i][j]=sqrt(h); 
      } 
    } 

for (i=0; i<n; i++) {for (j=0; j<n; j++) 
{ printf("%lf ", diff[i][j]); 
if (j!=0 && n % (j+1)==0){printf("\n");}} 
} 
i=0; 
double smallest=diff[i][1]; 
printf("smallest_initial %lf \n",smallest); 
int nxtcty=77; 
printf("nxtcty_initial %d\n",nxtcty); 
for (j=1; j<=n; j++) 
     { 
      printf("j_b4_if: %d, smallest_b4_if: %lf, nxtcty_b4_if: %d\n",j, smallest, nxtcty); 
      if (diff[i][j]<smallest) {smallest=diff[i][j]; nxtcty=j; 
       printf("j_in_if: %d, smallest_in_if: %lf, nxtcty_in_if: %d\n",j, smallest, nxtcty); } 
printf("j_in_for: %d, smallest_in_for: %lf, nxtcty_in_for: %d\n",j, smallest, nxtcty); 
     } 
printf("j %d,, nxtcty %d\n", j, nxtcty); 
       return 0; 
     } 
+0

什麼是'n'?這可能是。 –

+0

在C中將j賦值給nxtcty後,你不需要分號嗎? –

+0

@Rafe n是數組diff的大小[i] [j] – amyassin

回答

0

如果將nxtcty初始化爲2是一個好主意,那麼如果diff [i] [2]確實是最小的,那麼它將是最小的索引,而不是未初始化的。

如果您認爲應該進行分配,請嘗試在循環中每次打印diff [i] [j]以進行檢查。

+0

謝謝@MRAB ..代碼運行良好,沒有nxtcty,獲取第一行的最小值diff [i] [j] array .. nxtcty應該是列號「j」,其中最小的值是.. if循環不工作...任何想法? – amyassin

+0

第二個printf位於'if'語句的主體內部,所以只有在條件爲真時纔會打印,顯然,這從來就不是。在'if'語句前放一個printf來顯示diff [i] [j]並且最小。因此,我期望你會發現diff [i] [j]永遠不會小於最小值。 – MRAB

+0

謝謝@MRAB。實際上,我做了你所建議的和最小的變化,我做了一個測試,其中'最小'的初始值'diff'[1] [2]'不是最小的,並且觀察到'最小的'更改爲最小值由於for循環..但是,沒有線索,if語句正在工作...我有點卡在這裏! – amyassin

2

你有沒有打過將j的值賦給nxtcty的語句?如果不是,你看到的是nxtcty的初始值(未初始化)。

+0

sry ,,以前的評論是錯誤的.. @ 500 ,, j打印(如在問題中編輯的代碼) - 打印4>這是正常的..但nxtcty是134520820之前和分配後..這意味着分配過程是不正確的,我猜..任何想法? – amyassin

+0

如果nxtcty在134520820之前和之後都意味着循環中的「if」條件從未滿足。這意味着最小的元素是第一個元素,'diff [i] [2]'。你可以在'if'語句塊中放一個'printf'來確認。你還應該初始化nxtcty爲2. – uesp

+0

謝謝@uesp ..好吧,在將nxtcty分配給2之後:它堅持爲2!壞消息是:if語句中的printf不起作用!它永遠不會顯示任何東西......它告訴我關於代碼的一些信息:出於某種原因,最小的是直接從for循環中得到的,而不需要if語句! – amyassin