hello coders, i hope you all are going well, one thing blows my mind today in c i can't explain it this is why title is akward, so the thing is i have an array called tab[n] i wanted to invert it elements from tab to tab[n-1] and and the tab[midle] would remain the same so i used intermediate variable x, max, half, what i get in resutl is just unexpected because before the entering the loop for the value of max is equal to 14 once once in the for loop max is equal to 0 i don't understand why; sec time it is equal to 13 normal cause i have max--; then again max=1 i don't get why, then max=13 normal

``````#include <stdio.h>
#define DIM 15
int main(void){
int x ;
int i=0;
int max=14;
int tab[DIM]={1,5,3,0,4,0,5,8,3,0,5,3,0,7};
int half;
if(DIM%2==0){
half = DIM/2;
}
else{
half = (DIM-1)/2;
}
printf("max initial =%d\n", max);
printf("half initial =%d\n", half);
for (i=0; i<=half; i++) {
x=tab[i];
tab[i]=tab[max];
tab[max]=tab[i];
max--;
printf("max=%d\n", i);
printf("max=%d\n", max);
}
for (i=0; i<DIM; i++) {
printf("tab[%d]=%d\n", i, tab[i]);
}
return 0;
}``````

## All 5 Replies

Why do you reference tab in line 19?
I see you initialized the array tab[] in line 7 with 14 values but that only filled the tab[] array from tab to tab.

Since tab is not initialized, you can't be sure what will happen.

You should check that the calculation of half is really what you want.
The upper limit for the iteration might be DIM/2 - 1.

Also, I'd recommend using a different variable name for max.
max is a predefined function in C++. It takes in two operators and returns the maximum of the two. For example,

``dummyVar = max(2, 5); // should return 5``

Using it as a variable name might cause issues.

Your problem is one of perception. You have 2 statements printing that `max =`. One is reporting the value of `i` and the other is reporting the value of `max`. Change the first one to `i =` and you should start seeing things right.

Take a close look at your swap. There's an error there!

And you can just say `half = DIM / 2;`