我想从动态整数表中找到最小数量和摘要。我不知道为什么结果没有显示出来。我在malloc上做错了什么?我也可以使用realloc吗?
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n,i,min,sum,xronos;
int* array;
printf("Give me how many numbers does the table will have: \n");
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));
for(i=1;i<=n;i++)
{
printf("Give the number %d",i);
printf("\n");
scanf("%d",&array[i]);
}
for(i=1;i<=n;i++)
{
sum=sum+array[i];
if (i=1)
{
min=array[i];
}
else
{
if (array[i]<min)
{
min=array[i];
}
}
}
printf("%d",sum);
printf("\n The answer is :",(n-2)*min+(sum-min));
getch();
return 0;
}
答案 0 :(得分:2)
是的,这几乎就是你应该如何使用malloc
,除了三件小事和一件大事:
malloc
结果投射到C,free(array)
以避免内存泄漏。最重要的是,您不需要malloc
来解决此问题:您可以随时计算sum
和min
,而无需将单个项目保存到一个数组。
您可以使用此检查替换循环中if
的链:
if (i == 0 || array[i] < min) {
min=array[i];
}
这包括第一个元素的赋值和第一个元素以外的元素的比较。
最后,你可以重写这个
sum=sum+array[i];
作为
sum += array[i];
使用复合赋值运算符。不要忘记将sum
初始化为零!
答案 1 :(得分:0)
第22行,需要
if (i=1)
设为
if (i==1)
现在你将我设为等于1
答案 2 :(得分:0)
#include <stdlib.h>
#include <stdio.h>
#include <errno.h> /* Defines: ENOMEM */
int main()
{
添加了rCode以帮助进行错误处理。
int rCode=0;
删除了未使用的xronos。
int n,i,min;
初始化总和为0;
int sum=0;
将数组指针初始化为NULL,以便更容易清理。 int * array = NULL;
printf("Give me how many numbers does the table will have: \n");
scanf("%d",&n);
将malloc的输出转换为(int *)没有任何内在错误。在某些情况下,这是一个很好的编码实践。 (干得好)。
array=(int*)malloc(n*sizeof(int));
你应该总是测试你实际上从malloc获得了内存。
if(NULL == array)
{
rCode=ENOMEM;
fprintf(stderr, "malloc() failed.");
goto CLEANUP;
}
数组元素索引的范围为0到(n-1)。开始索引为零,并确保停在(n-1)。
for(i=0;i<n;i++)
{
printf("Give the number %d",i);
printf("\n");
scanf("%d",&array[i]);
}
同样,数组元素索引的范围为0到(n-1)。开始索引为零,并确保停在(n-1)。
for(i=0;i<n;i++)
{
sum=sum+array[i];
if(1 == i)
min=array[i];
else
{
if(array[i] < min)
min=array[i];
}
}
printf("%d",sum);
printf("\n The answer is :",(n-2)*min+(sum-min));
getch();
CLEANUP:
从我早年起,父亲会告诉我:&#39;当你把玩具带到沙箱时,一定要记得在完成后将它们拿走。&#39;
if(array)
free(array);
return(rCode);
}