我想从用户获取一个变量并将其设置为我的数组大小。但在C中我不能将变量用于数组大小。我也不能在我的项目中使用指针和*符号,因为我正在学习C而我的老师说这是禁止的。有人能告诉我从用户那里获取数组大小的方法吗?
最后,我想做这两个项目:1-从用户获取n并从用户获取int数字然后反向打印条目。 2-从用户获取n并从用户获取浮点数并计算平均值。唯一的方法是使用可变大小的数组。
<3
编辑(答案):
让我讲述一下故事。
我老师的第一个问题是:从用户那里获取条目(int),直到用户输入'-1',然后输入从最后到第一个的条目号。 (老师让我用递归函数和没有任何数组解决这个项目)第二个问题是:从用户获取n个条目(浮点数)并计算它们的平均值。 (为此,我必须使用数组和函数或简单的代码,没有任何指针)
Modern C具有可变大小的数组,如下所示:
void example(int size)
{
int myArray[size];
//...
}
大小不应该太大,因为aray是在堆栈上分配的。如果它太大,堆栈将溢出。此外,此aray仅存在于函数中(此处:funtion example
),您无法将其返回给调用者。
我认为你的任务是提出一个不使用数组的解决方案。
对于任务2来说非常简单。只需累积输入并除以打印前的输入数量。喜欢:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float result = 0;
float f;
int n = 0;
printf("How many numbers?\n");
if (scanf("%d", &n) != 1) exit(1);
for (int i=0; i < n; ++i)
{
if (scanf("%f", &f) != 1) exit(1);
result += f;
}
result /= n;
printf("average is %f\n", result);
return 0;
}
第一个任务有点复杂,但可以使用递归来解决。这是伪代码中的算法。
void foo(int n) // where n is the number of inputs remaining
{
if (n == 0) return; // no input remaining so just return
int input = getInput; // get next user input
foo(n - 1); // call recursive
print input; // print the input received above
}
并称之为
foo(5); // To get 5 inputs and print them in reverse order
我将留下OP将这个伪代码转换成真正的代码。
您实际上可以使用可变大小的数组。在使用-std=c99
进行编译时允许使用它们
否则,您可以使用任意大小(如实际大小的上限)过度分配数组,然后使用用户提供的实际n。
我不知道这是否对您有所帮助,如果没有请提供更多信息,可能还有您已经实现的目标。