代码之家  ›  专栏  ›  技术社区  ›  Jamie Keeling

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

c
  •  2
  • Jamie Keeling  · 技术社区  · 15 年前

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

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

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

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

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

    #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);
    }
    

    虽然这可能不是实现它的最佳方法,但当预先指定了数字的数量时,它确实起作用。

    最好的解决方法是什么,允许用户输入尽可能多的数字?

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Carl Norum    15 年前

    在代码简单性方面,您可能需要检查 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;
    
        2
  •  3
  •   pestilence669    15 年前

    如果你想计算一个平均值,那么你不需要保存这些数字。省去了担心阵列的工作。只需将每个数字累加(相加)为一个总数,计算每个数字,然后在完成后除以。你只需要两个变量。

    使用此方法,您不会有溢出数组的风险,因此可以使用while循环…(临时)!= -1)

        3
  •  2
  •   Firas Assaad    15 年前

    基本上,您从一个具有固定大小的动态分配数组开始,然后分配一个更大的新数组(例如,比初始大小大两倍),并在用完空间时将这些内容从旧数组复制到新数组。

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

    类似的东西 this .

        4
  •  0
  •   Curd    15 年前

    使用动态数组数据结构,比如Java中的vector(java. U.L.vector)。

    您可以自己轻松实现这样一个动态数组:

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