【发布时间】:2020-09-01 20:29:43
【问题描述】:
我被分配了编写一个程序的任务,该程序动态分配 n 随机大小的数组 t,用随机值填充它们,找到最小和最大元素,然后打印出它们的差异模块.
用户输入的n的值必须在(5, 20]范围内,t应该在[10, 1000]范围内生成并且用于填充这些数组的值的范围应该为 [-10, 0]。
这是我的尝试:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int n,i,j,t,a[t],z,min=10000000,max=0;
do
{
scanf("%d",&n);
}
while(n<=5 || n>20);
for(i=0;i<n;i++)
{
t=(10)+rand()%(10-1000+1);
a[t]=(int*)malloc(t*sizeof(int)); // <-- This generates an error
for(j=0;j<t;j++)
{
a[t]=(-10)+rand()%(-10+1);
if(a[t]<min) min=a[t];
if(a[t]>max) max=a[t];
}
}
printf("%d",z=abs(min-max));
return 0;
}
编译器只显示这个错误,但我不确定其余代码是否良好。
15 6 C:\Users\x\asfag.cpp [Error] invalid conversion from 'int*' to 'int' [-fpermissive]
我做错了什么?
【问题讨论】:
-
a[t]应该是*a,而a[t]=(int*)malloc(t*sizeof(int));应该是a=malloc(t*sizeof(int));别忘了free内存 -
已修复错误但我没有得到任何输出
-
t 的值是好的,它的 % -989 不是 -9989
-
请尝试改掉在一行中声明一大堆变量的习惯,并努力给出这些有意义的名称。提示:您通常可以在循环本身内声明循环变量,从而减少混乱并更容易验证循环是否正确:
for (int i = 0; ...)比在您需要去寻找它的其他地方声明int i要好得多。跨度>
标签: arrays c pointers memory random