我正在尝试编写一个函数,该函数将生成从1
到数字n
的连续数字数组。例如,我希望array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
。我的代码似乎没有运行,但我不知道为什么。
int count (int a)
{
scanf("%d", &a);
int i;
int array[a];
do
{
i = 0;
a = a - i;
array[a - 1] = a;
i++;
}
while (a > 0);
printf("Resulting array is %d", array[a]);
return 0;
}
答案 0 :(得分:3)
您应该使用for循环来创建数组。
int i;
int array[a];
for(i = 0; i < a; i++) {
array[i] = i + 1;
}
return 0;
答案 1 :(得分:3)
惯用的C方式是定义一个填充现有数组的函数:
void count(int *array, int max)
{
for (int i = 0; i < max; ++i)
{
array[i] = i+1;
}
}
你可以打电话给他,例如像这样:
int arr[10];
count(arr, 10);
for (int i = 0; i < 10; ++i)
{
printf("%d ", arr[i]);
}
答案 2 :(得分:2)
您的do while
循环可以简单地替换为以下for
循环:
for (i = 0; i < a; i++)
array[i] = i + 1;
同样,要在array
中显示每个元素,您可以通过array
循环遍历for
的元素:
for (i = 0; i < a; i++)
printf("Element at %2d is %d\n", i, array[i]);
答案 3 :(得分:1)
首先是打印声明
printf("Resulting array is %d", array[a]);
错了!!那不是你打印阵列的方式。您需要遍历索引,获取单个元素并打印它们。
此外,当您尝试使用array[a]
时,请考虑a
的值。那肯定是不是你想要的。
也就是说,还存在其他问题,例如在i
循环的每次迭代中将0
设置为do...while
。这将失去先前计算的值并重新开始。将初始赋值移到循环体外。
稍加修改的版本,请按照评论
#include <stdio.h>
int count (void) // no need for parameter if you're asking user for size
{
int size = 0; //define size
int ret = scanf("%d", &size); //read it
if ( (ret != 1) || ( size < 1) ) return -1; //error check
int i = 0; //initialize local variables
int array[size]; //note: this is VLA
do
{
array[i] = i+1; //start populating elements
i++;
}
while (size > i); //go on unless you've reached the given size
puts ("Resulting array is"); // start printing ....
for (i = 0; i < size; i++)
{
printf("%d\t", array[i]); //...them one by one
}
return 0;
}
int main(void)
{
(void)count(); //call the function
}
答案 4 :(得分:0)
尝试这样的事情:
int* count(int a)
{
int array[a];
for (int i = 0; i < a; ++i)
{
array[i] = i + 1;
}
for (int i = 0; i < a; ++i)
{
printf("%d, ", i + 1);
}
return array;
}
答案 5 :(得分:0)
a
参数。您可以使用本地do,while
设置为i
并且过于复杂,因此0
已损坏。您可以通过更简单的方式获得相同的结果。位置i
的元素必须具有值i+1
,听起来很简单。printf
仅打印数组的1
元素。如果你想要所有这些,那么你必须遍历所有这些。如下所示:
void count(){
int a,i=0;
scanf("%d", &a);
int array[a];
while(i<a){
array[i]=i+1;
i++
}
//now print it
i=0;
while(i<a)
printf(" %d ", array[i++]);
}
另外,请注意您使用的是VLA。这意味着你可以创建的数组大小有限,这取决于你的机器+编译器。
答案 6 :(得分:0)
所以这里有一些错误。一个,如果你接受&#39; a&#39;作为一个功能的arg,你为什么要扫描它。它只是写了你收集的价值。您尝试打印数组的方式有两个错误,如上所述,您应该使用循环。三,你可以保存几行,
for(int i =0; i<a ; i++)
{
arr[i]=i+1;
}
答案 7 :(得分:0)
我试图编写一个连续数组的函数 数字从1到数字n。
在C ++中,已经存在一个名为actual.every((x, i) => expect(x).toBeCloseTo(expected[i]));
的函数,并在标题iota
中声明。
在C中,这样的功能可以按以下方式看待
<numeric>
这是一个示范程序
void iota(int a[], size_t n, int value)
{
for (size_t i = 0; i < n; i++) a[i] = value++;
}
如果要输入#include <stdio.h>
void iota(int a[], size_t n, int value)
{
for (size_t i = 0; i < n; i++) a[i] = value++;
}
int main(void)
{
size_t n = 1;
scanf( "%zu", &n );
int a[n];
iota( a, n, 1 );
for ( size_t i =0; i < n; i++ ) printf( "%d ", a[i] );
putchar( '\n' );
return 0;
}
,则输出将显示为
10
至于你的程序,然后在这个循环中
1 2 3 4 5 6 7 8 9 10
变量do
{
i = 0;
a = a - i;
array[a - 1] = a;
i++;
}
while (a > 0);
未被更改,因为在每次迭代开始时变量a
都设置为0.
您可以像
一样编写循环i
考虑到这个陈述
i = 0;
do
{
array[a - i - 1] = a - i;
i++;
} while ( i != a );
没有意义。如果要按元素输出数组元素,则必须使用循环,例如它在上面的演示程序中显示。