Сжать массив, удалив из него все элементы, модуль которых находится в интервале - C (СИ)

Формулировка задачи:

Привет всем, помогите поймать ошибку в коде, пожалуйста. Задача: Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,Ь]. Освободившиеся в конце массива элементы заполнить нулями.
    for (i=0; i < n; i++)
    {
        if ((arr[i] >= a) && (arr[i] <= b))
        {
            arr[i] = arr[i+1];
            i--;
        }
 
    };
Глаза замылились, не могу понять, почему программа начинает зацикливаться на этом шаге, другие вроде выполняются адекватно...

Код к задаче: «Сжать массив, удалив из него все элементы, модуль которых находится в интервале - C (СИ)»

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

13   голосов, оценка 3.538 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы