Сжать массив, удалив из него все элементы, модуль которых находится в интервале - C (СИ)
Формулировка задачи:
Привет всем, помогите поймать ошибку в коде, пожалуйста.
Задача: Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,Ь]. Освободившиеся
в конце массива элементы заполнить нулями.
Глаза замылились, не могу понять, почему программа начинает зацикливаться на этом шаге, другие вроде выполняются адекватно...
for (i=0; i < n; i++)
{
if ((arr[i] >= a) && (arr[i] <= b))
{
arr[i] = arr[i+1];
i--;
}
};Решение задачи: «Сжать массив, удалив из него все элементы, модуль которых находится в интервале»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void print_array(const char * msg, int * a, unsigned count) {
printf("%s {", msg);
if (count > 0) printf("%d", *a);
for (++a; count > 1; ++a, --count) printf(", %d", *a);
printf("}\n");
}
int main() {
int a = 3, b = 8, i, j, t;
int arr[] = { 10, 3, 2, 1, -4, 3, 22, 11, -14 };
unsigned n = sizeof(arr) / sizeof(*arr);
print_array("BEFORE ", arr, n);
for (i = 0, j = 0; i < n; ++i) {
t = abs(arr[i]);
if (t < a || t > b) arr[j++] = arr[i];
}
while (j < n) arr[j++] = 0;
print_array(" AFTER ", arr, n);
return 0;
}