Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加到动态数组时转义循环-C_C - Fatal编程技术网

添加到动态数组时转义循环-C

添加到动态数组时转义循环-C,c,C,目前,我的程序允许用户输入5个整数,用于创建一个平均数。该值设置为5,因为在输入第五个数字后,循环被中断 我正在尝试实现一种方法,该方法允许用户继续向数组中添加任意数量的数字,然后我可以使用该数组创建一个平均值,而不限制可以输入的数字数量 我遇到了一些问题,首先我不能创建一个动态数组,因为我不知道用户可能希望输入多少数字,这意味着我不能给它一个确定的大小 其次,我的程序当前创建平均值的方式是通过循环数组中的元素,并将连续的元素添加到一个整数中,从该整数中生成平均值。如果无法确定数组,则无法指定循

目前,我的程序允许用户输入5个整数,用于创建一个平均数。该值设置为5,因为在输入第五个数字后,循环被中断

我正在尝试实现一种方法,该方法允许用户继续向数组中添加任意数量的数字,然后我可以使用该数组创建一个平均值,而不限制可以输入的数字数量

我遇到了一些问题,首先我不能创建一个动态数组,因为我不知道用户可能希望输入多少数字,这意味着我不能给它一个确定的大小

其次,我的程序当前创建平均值的方式是通过循环数组中的元素,并将连续的元素添加到一个整数中,从该整数中生成平均值。如果无法确定数组,则无法指定循环继续运行的限制

希望我的例子能更好地解释这一点

#include <stdio.h>
#include <string.h>

void main()
{
    int i = 0;
    int arrayNum[5];
    int temp = 1;
    int anotherTemp = 0;
    int answer = 0;


    printf("Enter as many numbers as you like, when finished enter a negative number\n");

    for(i = 0; i < 5; i++)
    {
        scanf("%d", &temp);

        arrayNum[i] = temp;

        anotherTemp = anotherTemp + arrayNum[i];
    }

    answer = anotherTemp / 5;

    printf("Average of %d,%d,%d,%d,%d = %d",arrayNum[0],arrayNum[1],arrayNum[2],arrayNum[3],arrayNum[4],answer);
}
#包括
#包括
void main()
{
int i=0;
int arrayNum[5];
内部温度=1;
int ANOTHERTTEMP=0;
int-answer=0;
printf(“输入任意数量的数字,完成后输入负数\n”);
对于(i=0;i<5;i++)
{
scanf(“%d”、&temp);
arrayNum[i]=温度;
anotherTemp=anotherTemp+arrayNum[i];
}
答案=另一个温度/5;
printf(“平均值%d,%d,%d,%d,%d=%d”,arrayNum[0],arrayNum[1],arrayNum[2],arrayNum[3],arrayNum[4],答案);
}
虽然这可能不是实现它的最佳方式,但在预先指定了数字量时,它确实起作用

解决这个问题的最佳方法是什么,允许用户输入尽可能多的数字


编辑:虽然我需要使用一个数组,但我认为它不是必需的,因为解决方案简单得多,而且不受它的限制。

关于代码的简单性,您可能需要查看
realloc()
函数;您可以分配一些大小的初始数组,如果用户输入的数字太多,请调用
realloc()
以获得更大的数组,然后继续

然而,你实际上根本不需要在进行过程中保留这些数字,至少如果你只关心平均数:

int input;
int sum = 0;
int count = 0;
int average;

while (1) {
    scanf("%d", &input);
    if (input < 0) {
        break;
    }
    sum += input;
    count++;
}

average = sum / count;
int输入;
整数和=0;
整数计数=0;
整数平均;
而(1){
scanf(“%d”,输入(&I));
如果(输入<0){
打破
}
总和+=输入;
计数++;
}
平均数=总和/计数;

使用动态数组数据结构,如Java中的Vector(Java.util.Vector)

您可以自己轻松实现这样的动态阵列:

  • 分配大小为N的数组
  • 一旦您需要的元素多于N,就分配一个新的更大的数组(例如大小为N+10),将旧数组的内容复制到新数组中,并将新数组的工作引用和数组大小变量N设置为新大小(例如N+10)。释放旧阵列

基本上,您可以从一个固定大小的动态分配数组开始,然后分配一个更大的新数组(例如,两倍于初始大小),并在空间不足时将内容从旧数组复制到新数组

对于问题的第二部分,保留一个计数器,记录用户输入的项目数,并在求平均值时使用它


类似于。

如果您试图计算平均值,则不需要保存数字。不用担心阵列。只需将每个数字累加到一个总数中,计算每个数字,然后在完成后进行除法。您只需要两个变量


使用此方法,您不会有溢出数组的任何风险,因此可以使用while循环。。。而(temp!=-1)

问题被标记为C!没有这样的奢侈。@Mehrdad Afshari:这就是为什么我添加了“你可以自己轻松实现这样一个动态数组”并解释了它!我会投票支持使用数组的解决方案,但是卡尔和其他人似乎都同意最简单的方法就是完全忽略数组。@Jamie Keeling:是的,如果你只想计算平均值,你根本不需要数组(计算总和,最后除以值的个数就可以了)。但是,我假设您想将值存储到一个数组中(可能您还想对这些值做其他事情,但没有提到),我的目的是使用数组,但是如果我只需要这些数字的平均值,我无法理解它的必要性。抱歉给你带来困惑。这似乎是最简单的解决办法,我不想把它复杂化。谢谢。在计算平均值时,我的计数器中似乎有一个附加值,我已设法解决了这个问题,只需从计数中删除1即可获得正确的金额。你能建议一个更好的解决办法吗?减去一个没有什么错。也许您可以更改循环结束时测试语句的顺序以及用于增加变量的语句。一个是处理未指定长度的输入,第二个是处理动态数组,第三个是如何最好地形成平均值(答案是不需要为此存储数据)。我认为所有这些问题都在下面的答案中得到了解决,它们肯定在网站的其他地方得到了解决。我知道我不需要将数字存储在数组中以形成平均值,我只是被指示尝试使用数组来实现。