присвоение значения изменяющемуся циклу for - PullRequest
0 голосов
/ 30 июня 2011

в предыдущем вопросе у меня была проблема в каком-то коде, после того как я обнаружил, у меня была другая проблема в коде:

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

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Вы когда-нибудь сталкивались с утверждением, которое присваивает значение j nxtcty? Если нет, то вы видите начальное (неинициализированное) значение nxtcty.

0 голосов
/ 30 июня 2011

Если было бы хорошей идеей инициализировать nxtcty равным 2, чтобы, если diff [i] [2] действительно было наименьшим, то это был индекс наименьшего и еще не инициализированного.

Если вы думаете,что назначение должно выполняться, попробуйте распечатывать diff [i] [j] каждый раз вокруг цикла, чтобы проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...