编写一个程序,将其分为带有参数的函数,该程序将加载一个动态整数数组,直到用户输入数字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/