Консультация № 110003
18.11.2007, 16:26
0.00 руб.
0 3 3
Подскажите, почему меняется содержание массива? Я задаю:
int main(int argc, char* argv[])
{
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};
int stat[5]={1,1,1,2,2};
int N=6;
int n=3;
int m=2;
float Po=0;
int mxr[3][6]={0};
for (int i=0; i<N; i++)
{
for (int r=0; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]) {mxr[r][i]=0;}
else {mxr[r][i]=1;}
}
}
for (int r=0; r<(n+m); r++) {
printf("stat[%i] = %d",r, stat[r]);
}
}
Он выводит содержание массива stat[5]={0,0,0,1,1}, вместо заданного stat[5]={1,1,1,2,2}; если закоментить код, то выводит все правильно stat[5]={1,1,1,2,2}
Заранее спасбио!

Обсуждение

Неизвестный
18.11.2007, 17:33
общий
это ответ
Здравствуйте, Mart!
Да потому что происходит запись вне границ массива -
mxr[4][0]=0 , например, определитесь с размерами этого массива.
Удачи!
Неизвестный
18.11.2007, 18:11
общий
это ответ
Здравствуйте, Mart!
и опять же настойчиво рекомендую вам научиться пользоваться дебагом :)
ошибка в строке int mxr[3][6] = 0; должно быть int mxr[5][6] = 0; вы забыли правильно указать границы массива, в памяти все значения перемешались, поэтому вам программа случайно выдавала правильный результат (могла бы и не выдать, всё зависит от того как расположатся переменные в памяти)
Неизвестный
19.11.2007, 10:07
общий
это ответ
Здравствуйте, Mart!
А Вы уверены, что у Вас массив mxr[][] должен быть 3х6, а не 5х6?
Во всяком случае, после смены 3 на 5 ответ получается верным
Форма ответа