СИ зацикливается и не выводит нужный массив, хелп

Ситуация такая, есть задача

введите сюда описание изображения

Есть код

#define _CRT_SECURE_NO_WARNINGS // Штука для удаления ошибки с scanf
#include <stdio.h> // Подключнение библиотеки для ввода вывода
#include <locale.h>// Подключение библиотеки для использования русского языка в выводе
#include <stdlib.h> // Для рандома
#include <malloc.h>
#include <math.h>
#include <time.h>
#include <windows.h>


char** WordSearch(char** array, int N, int M, char letter)
{
    for (int i = 1; i < N; i=i+2)
    {
        for (int j = 0; j < M; j++)
        {
            if(array[i][j]==letter)
                while (array[i][j] != ' ')
                {
                    if ('а' <= array[i][j] && array[i][j] <= 'я')
                    {
                        array[i][j] = array[i][j] + 'А' - 'а';
                        j++;
                    }
                }
        }
    }

    for (int i = 0; i < N; i = i + 2)
    {
        for (int j = 0; j < M; j++)
        {
        if (array[i][j] == letter)
            while (array[i][j] != ' ')
            {
                if ('а' <= array[i][j] && array[i][j] <= 'я')
                {
                    array[i][j] = ' ';
                    //j++;
                }
            }
    }
}
return array;
}


int main(void)
{

    srand(time(NULL));


    SetConsoleCP(1251);//Отображение русского языка в кансоли(вывод char)
    SetConsoleOutputCP(1251);

    setlocale(LC_ALL, "Rus");//Команда для включения русского языка в выводе
    int flag = 0, GlobalCounter=0, maxcount = 0;// Выделение памяти под переменные
    char letter;
    char** A;
    char** B;


    int* count = new int[256];// Создаем массив под хранение длин сток

    A = (char**)malloc(256 * sizeof(char*));//Создаём двумерный массив под хранение всех наших строк, заведомо максимального размера



    for (int i = 0; i < 256; i++) // цикл по строкам
    {
        // Выделение памяти под хранение строк
        A[i] = (char*)malloc(256 * sizeof(char));//Выделяем память под строки

    }



    B = (char**)malloc(256 * sizeof(char*));//Создаём двумерный массив под хранение всех наших строк, заведомо максимального размера



    for (int i = 0; i < 256; i++) // цикл по строкам
    {
        // Выделение памяти под хранение строк
        B[i] = (char*)malloc(256 * sizeof(char));//Выделяем память под строки

    }



    while (flag != 1)//Основной цикл ввода строк(текста)
    {
        char* A1 = new char[256];//Создаем массив для н-ой строки
        printf("Введите строку\n");
        int i = 0, counter=0;
        while ( i < 256)//Заполняем строку значениями символов, которые вводит пользователь 
        {
            scanf("%c", &A1[i]);
            //printf("%d", getchar());
            if (A1[i] == '\n')//Проверяем нажатие на пробел, если оно есть, то заполнение строки заканчивается 
            {
                break;//Выходим из заполнения строки
            }
            i++;
            counter++;//переменная для подсчёта количества символов в строке
        

        }
        count[GlobalCounter] = counter;//в массив, хранящий длины строк запихиваем длину очередной строки
    
        // GlobalCounter - переменная для отслеживания количества введённых строк
        if (maxcount < counter)
        {
            maxcount = counter; //Определяем максимальную длину строки для вывода в последствии
        }


        counter++;// Для цикла 

        for (int j = 0; j < counter; j++)
        {
            A[GlobalCounter][j] = A1[j];//Заполняем соответсвующую строку в двумерном массиве
        }


        GlobalCounter++;//переходи на новую строку
        for (int i = 0; i < counter-3; i++)//Цикл по определению "Стопслова"
        {
            if (A1[i] == 'e')
            {
                if (A1[i + 1] == 'n')
                {
                    if (A1[i + 2] == 'd')
                    {
                        flag = 1;//Если слово совпало, то Выходим из цикла заполнения строк
                    }
                }
            }
        }

    

    
    }

    printf("===================Вы ввели текст===================\n");//Выводим введённый текс
    for (int i = 0; i < GlobalCounter-1; i++)
    {
        for (int j = 0; j < count[i] ; j++)
        {
            printf("%c", A[i][j]);
        }
        printf("\n");
    }
    printf("====================================================\n");

    printf("--------------------------------------------------------------------\n");
    printf("Введите букву, слова на которую будут в чётных строках удалены\n");
    printf("В нечётных строках заменены на слова написанные заглавными буквами\n");
    printf("--------------------------------------------------------------------\n");
    printf("--------------\n");
    scanf("%c", &letter);
    printf("--------------\n");


    B = WordSearch(A, GlobalCounter, maxcount, letter);

    printf("===================Мы модифицировали текс===================\n");//Выводим введённый текс
    for (int i = 0; i < GlobalCounter - 1; i++)
    {
        for (int j = 0; j < count[i]; j++)
        {
            printf("%c", B[i][j]);
        }
        printf("\n");
    }
    printf("============================================================\n");

}

Код не арбайтен. Понятия не имею почему. Где-то ошибка, но, я похоже слишком слеп, чтобы её увидеть


Ответы (0 шт):