Добавление одного и того же числа несколько раз в пустой массив в C

#c #function #sorting

#c #функция #сортировка

Вопрос:

Это фрагмент кода для добавления одного и того же числа несколько раз в пустой массив, но когда я печатаю непустой массив, я получаю некоторые другие значения:

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


void sort_0(int arr[100], int i, int n){
    int final_array[100], c=0;

    // Count the number of '0' in the array
    for(i=0;i<n;i  ){
        if(arr[i] == 0){
            c  ;
        }
    }

    // Add the c number of '0' to the final_array
    for(i=0;i<c;i  ){
        scanf("%d",final_array[i]);
    }

    for(i=0;i<c;i  ){
        printf("%d ", final_array[i]);
    }
}
int main(){
    int arr[100], i, n;

    // Entering the size of the array
    scanf("%d", amp;n);

    // Entering n elements into the array
    for(i=0;i<n;i  ){
        scanf("%d", amp;arr[i]);
    }

    sort_0(arr,i,n);
    
    return 0;
}
 

В приведенном выше коде подсчитывается количество раз, которое 0 появляется в массиве. Затем количество берется как диапазон и 0 добавляется к количеству пустых массивов final_array .

Если c = 5 , final_array = {0,0,0,0,0}

Ожидаемый результат:

 arr = {0,1,4,3,0}
Output = 2
 

Я не получаю никаких выходных данных

Комментарии:

1. scanf(«%d», amp;arr[i])

2. Пожалуйста, также покажите ожидаемый результат по сравнению фактический результат (какой из них {0, 0, 0, 0, 0}?) и код, используемый для печати содержимого массива, и как вызывается sort_0.

3. Не связанный, похоже, что i должен быть не параметром функции, а локальной переменной в функции.

4. Я уже написал эту часть, но забыл добавить ее здесь. Он все еще не работает.

5. В принципе, вы хотите создать массив, число 0 которого равно c ? Я прав?

Ответ №1:

Поскольку вы не знаете, сколько 0 вам нужно будет добавить к вашему array_final , я понял, что лучшим решением может быть создание этого массива после того, как у вас будет номер 0 первого массива. Кроме того, я не вижу причин, по которым вы переходили i к функции, поскольку вы можете просто определить ее в самой функции.

 void sort_0(int arr[10], int n, int* c){
        int i;
        for(i=0;i<n;i  ){
            if(arr[i] == 0){
                (*c) = 1;
            }
        }
}


int main (void) {
    int size;
    
    printf("Enter array size: ");
    scanf("%d", amp;size);
    int arr[size];
    for (int i=0;i<size;i  ) {
        scanf("%d",amp;arr[i]);
    }
    
    int c = 0;
    sort_0(arr, size, amp;c);
    
    printf("C is: %dn",c);
    int* final_array;
    if ((final_array=malloc(c * sizeof(int)))==NULL) // should always check malloc errors
    { 
        perror("malloc");
        return -1;
    }
    for (int i=0;i<c;i  ) {
        final_array[i]= 0;
    }
    
    printf("{");
    for (int i=0;i<c-1;i  ) {
        printf("%d,", final_array[i]);
    }
    printf("%d}n",final_array[c-1]);
    
    return 0;
}
 

Комментарии:

1. Спасибо. Это решило мой запрос. Мне все еще нужно узнать больше о malloc.

2. malloc позволяет распределять память динамически. Часть malloc(c*sizeof(int)) означает, что вы создаете массив размера c , который содержит тип элементов int . Это то же int array[c] самое, что если вы хотите изменить всю malloc деталь целиком.

3. @MatteoPinna В вашем коде была небольшая ошибка, я исправил, просто проверьте, все ли в порядке с кодом

4. Да, спасибо. Просто пришлось удалить { слишком много.