# Block Values That Are Smaller Than The Previous Iteration

## 21 March 2022 - 1 answer

This loop checks the previous element in an array. The question is how can it be avoided to check the `arr[0][0]` with its previous element which causes undefined behavior?

Here is the code so far but it has this issue with the the first element being checked with its previous element.

``````int main()
{
int arr[2][4];
int k, n;

for (k = 0; k < 2; k++) {
for (n = 0; n < 4; n++) {

do {
printf("Provide a number");
scanf("%d", &arr[k][n]);
printf("This is %d in the position[%d][%d]\n", arr[k][n], k, n);
if (n==0) break;
printf("The arr[k][n] is %d and the arr[k][n-1] is %d and n-1 means %d\n", arr[k][n], arr[k][n - 1], n - 1);
} while (arr[k][n] <= arr[k][n - 1]); //Here is the issue
}
}
for (k = 0; k < 2; k++) {
for (n = 0; n < 4; n++) {
printf("%d\n", arr[k][n]);
}
}
}
``````

The issue:

Adding the `if (n==0) break;` causes the program to allow adding smaller numbers than the ones inserted so far. While not including this line causes undefined behavior. How can this be fixed?

This is how it works now, which is not correct:

``````2       3       4       5
2       4       5       6
``````

The `printf` statements are only for the purpose of viewing what is going on.

You only check with previous column. That is not related to your `break` but due to broken logic.

You could do it like this:

``````int main()
{
int arr[2][4];
int k, n;
int last_number, new_number;

for (k = 0; k < 2; k++) {
for (n = 0; n < 4; n++) {

do {
printf("Provide a number");
scanf("%d", &new_number);
printf("This is %d in the position[%d][%d]\n", new_number, k, n);
if (n==0 && k == 0)
break;  // Don't check for increasing values.
} while (new_number < last_number);

arr[k][n] = new_number;
last_number = new_number;
}
}

for (k = 0; k < 2; k++) {
for (n = 0; n < 4; n++) {
printf("%d\n", arr[k][n]);
}
}
}
``````