在C中向空数组多次添加相同的数字

在C中向空数组多次添加相同的数字,c,function,sorting,C,Function,Sorting,这是一段将同一数字多次添加到空数组的代码,但当我打印现在的非空数组时,我会得到一些其他值: #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(

这是一段将同一数字多次添加到空数组的代码,但当我打印现在的非空数组时,我会得到一些其他值:

#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
。\u 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;
}
void sort_0(int arr[10],int n,int*c){
int i;

对于(i=0;iscanf(“%d”,&arr[i]),请同时显示预期输出与实际输出(哪一个是{0,0,0,0}?)以及用于打印数组内容以及如何调用sort_0的代码。不相关,看起来我不应该是函数参数,而是函数中的一个局部变量。我已经编写了这部分内容,但忘了在这里添加它。它仍然不起作用。基本上,您希望创建一个数组,其中的
0
数等于
c
?我说得对吗?谢谢。这解决了我的问题。我仍然需要了解更多关于malloc的信息。
malloc
允许您以友好方式分配内存。
malloc(c*sizeof(int))
部分意味着您正在创建一个大小为
c
的数组,其中包含元素type
int
。它相当于
int数组[c]
如果您想更改整个
malloc
部分。@MatteoPinna您的代码中有一个小错误,我已修复,请检查代码是否正确是的,谢谢。只是删除了太多的
{
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;
}