首页 > 解决方案 > 多次将相同的数字添加到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", &n);

    // Entering n elements into the array
    for(i=0;i<n;i++){
        scanf("%d", &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

我没有得到任何输出

标签: cfunctionsorting

解决方案


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", &size);
    int arr[size];
    for (int i=0;i<size;i++) {
        scanf("%d",&arr[i]);
    }
    
    int c = 0;
    sort_0(arr, size, &c);
    
    printf("C is: %d\n",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;
}

推荐阅读