Отсортировать методом обмена четные столбцы матрицы по возрастанию, нечетные - по убыванию

Нужно отсортировать методом обмена четные столбцы матрицы по возрастанию, нечетные - по убыванию. Этот код не работает, заменяя все элементы столбца последним элементом. Не могу найти, где ошибка в алгоритме.

#include <stdio.h>
#include <stdlib.h>

int main() {
    int t=0;
    int N=0;
    int A[N][N];
    do{  printf("Введите длинну рядка и столбца:\n");
        scanf("%d", &N);
    }while(N<1 || N>50);
    
    for(int i=0; i<N; i++){
        printf("\n");
        for(int j=0; j<N; j++){
            A[i][j] = rand() % 100;
            printf("\t%2.0d", A[i][j]);
            }}
    for(int j=0;j<N;j++){
        if (j%2==1){
        for(int k=N-1;k>0;k--){
        for(int i=0;i<k;i++){
            if(A[i][j]<A[i+1][j]){
                t=A[i][j];
                A[i][j]=A[i+1][j];
                A[i+1][j]=t;
            }
        }
        }}
        if (j%2==0){
        for(int k=N-1;k>0;k--){
            for(int i=0;i<k;i++){
                if(A[i][j]>A[i+1][j]){
                    t=A[i][j];
                    A[i][j]=A[i+1][j];
                    A[i+1][j]=t;
                }
            }
        }
        }}
    printf("\n");
    for(int i=0; i<N; i++){
        printf("\n");
        for(int j=0; j<N; j++){
            printf("\t%2.0d", A[i][j]);
            }}
}

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

Автор решения: Harry

Вы выделяете память неверно (а еще используете неверный спецификатор, но тут позже) -

int N=0;
int A[N][N];

В лучшем случае вы попытались выделить массив нулевого размера. Как совет - или используйте массив, скажем, int A[50][50] - у вас это предельный размер, или перенесите объявление массива как есть (раз ваш компилятор позволяет VLA) в строку после ввода N

} while(N<1 || N>50);

int A[N][N];

или выделяйте его динамически (см., например, тут). Все будет работать.

И еще - вы работаете с целыми числами, а для них указывать .0 в спецификаторе вывода

printf("\t%2.0d", A[i][j]);

просто бессмысленно. Достаточно %2d.

Еще, не сочтите за вредность, но по-русски - "по возрастанию", "по убыванию" или "в порядке возрастания/убывания".

→ Ссылка