C编程-递归填充数组
我正在尝试创建一个代码,这样它将要求用户键入数组的大小,以填充0-1000之间的随机数 我的尝试:C编程-递归填充数组,c,C,我正在尝试创建一个代码,这样它将要求用户键入数组的大小,以填充0-1000之间的随机数 我的尝试: #include <stdio.h> int main() { int p = 0; int s; int aRRay[1001]; printf("\n Enter size of an array to fill random numbers: "); scanf("%i",s); printf("%i",fillArray(aRR
#include <stdio.h>
int main()
{
int p = 0;
int s;
int aRRay[1001];
printf("\n Enter size of an array to fill random numbers: ");
scanf("%i",s);
printf("%i",fillArray(aRRay,p,s));
}
int fillArray(int aRRay[],int p, int s)
{
srand((unsigned)time(NULL));
int ran = rand()%1001;
aRRay[p] = ran;
if(p>s)
{
return 0;
}
else
{
return fillArray(aRRay,++p,s);
}
}
#包括
int main()
{
int p=0;
int-s;
int数组[1001];
printf(“\n输入填充随机数的数组大小:”);
scanf(“%i”,s);
printf(“%i”,fillArray(aRRay,p,s));
}
int fillArray(int数组[],int p,int s)
{
srand((无符号)时间(NULL));
int ran=rand()%1001;
数组[p]=ran;
如果(p>s)
{
返回0;
}
其他的
{
返回fillArray(数组,+p,s);
}
}
此代码崩溃。我不确定是否将最后一条printf语句放在了main中的错误位置。我可以把它放在函数fillArray中,而不是放在main中,然后使用递归逐个打印出来吗?(免责声明:以下文章试图解决所发布代码的直接错误和问题,可能还有其他与错误检查相关的问题和编码风格问题需要解决,但这些问题暂时不在本文讨论范围内,以便集中讨论主要问题)
scanf("%i", &s);
另外,您应该确保读取成功 int fillArray(int aRRay[], int p, int s)
{
if (p >= s)
{
return 0;
}
else
{
srand((unsigned)time(NULL));
int ran = rand() % 1001;
aRRay[p] = ran;
return fillArray(aRRay, ++p, s);
}
}
此代码中有几处明显错误,其中许多错误会产生您应该已经解决的警告: 一般而言:
srand()
是在time()
中定义的,您没有将其包括在内time.h
- 您没有将
地址作为输出目标传递给int
scanf
- 您没有检查
调用的结果scanf
- 您处理的是数量级,它应该是无符号类型。即使您修复了上述项,也有人可以输入
,您的代码将乐于解析它并进入未定义的行为-5
- 如果
是行缓冲的,则在没有刷新的情况下,您的输入提示将不可见stdout
- 如果要对数组大小使用硬限制(
),则应在有效读取数组的输入大小后强制执行该值1001
在首次在fillArray
中使用之前没有正式的原型。因此,假设函数接受任意数量的参数并返回main()
int
- 你是说,纾困逻辑做得太晚了,而且条件不对
- 您不应该在fill函数中调用
。它应该在进程启动时从srand()
调用一次main()
- 次要:您不需要同时传递当前输入槽和长度。您正在填充所有槽,因此基于值的降序槽或通过指针算法增加目标指针就足够了
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int fillArray(int arr[], unsigned int s);
int main()
{
unsigned int s = 0;
int arr[1001];
srand((unsigned)time(NULL));
printf("Enter size of an array to fill random numbers: ");
fflush(stdout);
if (scanf("%u",&s) == 1 && s < sizeof(arr)/sizeof(*arr))
printf("%d\n", fillArray(arr,s));
}
int fillArray(int arr[], unsigned int s)
{
if (s)
{
*arr = rand() % 1001;
return fillArray(arr+1, --s);
}
return 0;
}
#包括
#包括
#包括
int fillArray(int arr[],无符号int s);
int main()
{
无符号整数s=0;
int arr[1001];
srand((无符号)时间(NULL));
printf(“输入数组大小以填充随机数:”);
fflush(stdout);
如果(扫描频率(“%u”、&s)==1&s
scanf(“%i”和&s)可能是一个好的开始首先,为什么要递归?迭代有什么问题?其次,srand(time)
将使以下rand()
几乎每次返回相同的值(time
的分辨率为1秒)。最后,fillArray
是否总是返回0?请阅读的文档。注意,它可能会失败。您应该使用并测试scanf
的结果(扫描项目计数)。我更关注“错误修复”而是关于完整的错误处理,但我会提到这一点,因为它是正确的2000@pm100s
不是偶然出现的,这是项目符号的强制执行:“如果要对数组大小使用硬限制(在您的情况下为1001)有效读取数组的输入大小后,应强制执行该值“+1表示全面性。挑剔:--s
应该是s-1
。结果是一样的,但第一个是不好的风格,当你不需要修改变量时。它也会与arr+1
一致。很抱歉,我的意思是原始海报没有处理这个问题,你也没有在你很好的时候把它说出来list@pm100它是/是ca在列表中填写(见“概述”部分倒数第二项)。虽然事后诸葛亮是这样的,但应该是s