Программа для С которая нулевые элементы массива переставит в конец, а ненулевые в начало при этом не меняя порядок

Нужно написать программу для С, которая нулевые элементы массива переставит в конец, а ненулевые в начало при этом не меняя порядок. Не могу понять почему моя программа не работает (выводится одни нули). Подскажите пожалуйста

#include <math.h>
#include <stdio.h>

int main() {
    int N = 0;
    float A[N];
    do{  printf("Введите количество элементов:\n");
        scanf("%d", &N);
    }while(N<1 || N>20);
               
    printf("Введите элементы массива:\n");
    for(int i=0; i<N; i++){
        printf("A[%i]=", i);
        scanf("%f", &A[i]); }
    
        int i=0; int p=0;
    for (i=0,p=0; i<N-1; i++){
    if ( (A[i]=0)){
        p=i;
        for(p=i;p<N;p++)
        A[p]=A[p+1];} } 
        A[N-1]=0;

    for(i=0; i<N; i++){
        printf(" A[%i] = %3.2f \n", i, A[i]);
    }
}

  

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

Автор решения: TigerTV.ru

Вы намудрили со скобками, if ( (A[i]=0)){ - здесь происходит присвоение, а не сравнение, A[N-1]=0; не там стоит. Еще замечания по коду:A[p]=A[p+1]; - здесь происходит выход за границы массива, float A[N]; - объявляется до указания N отличного от нуля(в данном случае массив с нулевой длиной).

Работающий вариант будет таким:

    int i=0; int p=0;
    for (i=0,p=0; i<N-1; i++){
        if (A[i]==0){
            p=i;
            for(p=i;p<N-1;p++) {
                A[p]=A[p+1];
            }
            A[N-1]=0;
        } 
    }

Можно конечно улучшить.

→ Ссылка