编写一个程序,将其分为带有参数的函数,该程序将加载一个动态整数数组,直到用户输入数字0为止。最初,假定该数组仅包含5个此类数字。如果用户尝试输入的数字超出表可以存储的数量,则程序应检测到这种情况,并将其大小再增加5个元素。每当表在表中结束时,程序应重复上一句话中描述的步骤,直到用户输入完数字为止。毕竟,程序应该在屏幕上写表的内容并释放分配的内存。

     void fill_array(int *);
void print_array(int *, int);
void *add_memory(int);
int main()
{
    int x;
    int *array_pointer = (int*)calloc(5,sizeof(int));
    if(array_pointer)
    {
        fill_array(array_pointer);
        x = sizeof(array_pointer)/sizeof(array_pointer[0]);
        print_array(array_pointer, x);
    }

    return 0;
}

void fill_array(int *array)
{
    int i = 0, k = 5;
    printf("Please fill an array with at least 5 digits: ");

    while(scanf("%d", &array[i]) != 0)
    {
        if(i > 5)
        {
            k++;
            array = (int*)add_memory(k);

        }
        i++;
    }
}

void *add_memory(int a)
{

    void *array_ptr = realloc(array_ptr,a*sizeof(int));
    return array_ptr;
}

void print_array(int *array, int b)
{
    int i;
    for(i=0;i< b;i++)
        printf("%d ",array[i]);
    puts("");
}

最佳答案

这是代码的功能版本。您必须输入0停止程序并打印获得的信息。虽然还没有完全完成。您必须遵循以下步骤。


错误检查
装饰性更改,即撰写评论等。
取消分配资源


尽管似乎不再需要重新分配。

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

void fill_array(int *);
void print_array(int *, int);

int *add_memory(int **, int);
int k = 5;

int main()
{
    int x;
    int *array_pointer = (int*) calloc(k,sizeof(int));

    if(array_pointer)
    {
        fill_array(array_pointer);
        print_array(array_pointer, k);
    }

    if(array_pointer)
    {
    /* Deallocate the memory. */
    free(array_pointer);
    }

    return 0;
}

void fill_array(int *array)
{
    int i = 0;
    int number;
    printf("Please fill an array with at least 5 digits:");
    while(1)
    {
        printf("\r\nEnter a number: ");
        scanf("%d", &number);

        if (number == 0)
        {
            break;
        }
        else
        {
            if (i >= 4)
            {
                k++;
                array = (int*) add_memory(&array, k);

                if (!array)
                {
                    break;
                }

                array[i] = number;
            }
            else
            {
                array[i] = number;
            }

            i++;
        }

    }
}

int *add_memory(int **array_ptr, int a)
{
    printf("Allocating more memory\r\n");

    *array_ptr = realloc(*array_ptr, a*sizeof(int));

    if (!*array_ptr)
    {
        printf("Failed to allocate memory.\r\n");
    }

    return *array_ptr;
}

void print_array(int *array, int b)
{
    int i;
    printf("\r\nPrinting array\r\n");

    for(i=0;i< b;i++)
        printf("%d ",array[i]);
    puts("");
}

关于c - 程序没有结束,什么也没发生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55067457/

10-09 15:36
查看更多