当前位置: 首页 > 知识库问答 >
问题:

如何在C中声明具有未知条目数的数组?

卓俊晖
2023-03-14

问题如下:编写一个函数,提示用户输入一系列以值-1结尾的正整数。然后,该函数必须返回用户输入的最大值和最小值。您可以假设用户在输入-1之前至少输入一个正整数。

所以我想的是创建一个数组来存储输入的所有值。唯一的问题是,我不太确定如何声明具有未知条目数的数组,因为很明显,我不知道用户将在-1之前输入多少个整数。

然后对于后一部分,我想让最大值/最小值=arr[0],然后索引,一旦arr[索引]

非常感谢。

共有3个答案

缪征
2023-03-14

您可以使用动态存储分配,尤其是realloc。它允许您在每次输入新元素时调整数组的大小

顺便说一句,如果要从输入中提取最小值和最大值,则无需将输入参数保存到数组中。

在您如何将元素保存到动态数组中并提取最小值和最大值之后

int min = -1;
int max = -1;
int i = 0;

int *array=malloc(sizof(int));

while (scanf("%d", &x)>0 && x>0)
{
    if(i>0)
        realloc(array, (i+1)*sizeof(int));
    else {
        min = x;
        max = x;
    }
    array[i] = x;
    if (x>max) max = x;
    if (x<min) min = x;
    i++;
} 
司马英才
2023-03-14

不幸的是,你不能——至少不能直接。使用malloc()可以分配一个长度可变的数组,并且可以使用它来分配更多的空间。例如

int* numbers = malloc(sizeof(int)*how_many);
if (!numbers) {
  //error
}

//do stuff.

在您的示例中,您可以执行以下操作

while(not_done) {
  if( array-is-full ) {
    how_many *= 2;
    int* new_numbers = (int*)malloc(sizeof(int)*how_many);
    for(int i = 0; i < index;i++)
       new_numbers[i] = numbers[i];
    free(numbers);
    numbers = new_numbers;
  }

  //read user input
  //stick it into the array


}
桑思远
2023-03-14

使用动态内存分配函数,如malloc calloc和realloc,或者如果您有兴趣编写一些真正好的代码,请使用linkedlist。

顺便问一下,是否有必要将所有数字存储在一个数组中???你可以在飞行中检查最小值和最大值???

一个简单的算法是:

int maxval=0, minval = 0;
while(inputval != -1)
{
    if(inputval < minval)
       minval = inputval;

    if(inputval > maxval)
       maxval = inputval;
}
 类似资料:
  • 问题内容: 我想知道如何在bash中声明2D数组,然后初始化为0。 在C中看起来像这样: 以及如何为元素分配值?如在C中: 问题答案: 您可以使用例如哈希来模拟它们,但需要注意前导零和许多其他事情。下一个演示有效,但远非最佳解决方案。 上面的示例创建了一个具有随机数的4x5矩阵,并将其打印后转置,示例结果 原理是:创建一个关联数组,其中索引是类似的字符串。好处: 可以用于任意维度的数组;)像:3维

  • 问题内容: 我试图将项目添加到python中的数组。 我跑 然后,我尝试通过以下操作向此数组添加一些内容: 似乎没有办法。如何将项目添加到数组? 问题答案: 表示一个空字典,而不是数组/列表。对于列表或数组,您需要。 要初始化一个空列表,请执行以下操作: 要么 要将元素添加到列表,请使用 要在列表中包含其他列表中的元素,请使用 要从列表中删除元素,请使用 字典表示键/值对的集合,也称为关联数组或映

  • 问题内容: 在Scala中,我可以这样声明一个字节数组 这太冗长了。有没有更简单的方法来声明Byte数组,类似于Java的 请注意,由于String 中的,以下结果导致错误 问题答案: 我相信您能做的最短的是 您 必须 将和转换为字节,因为它们不是有效的字节文字,因为它们超出了有符号字节的范围([-128,127])。 请注意,Java也是如此,以下给出了编译错误: 您必须将192和168强制转换

  • 问题内容: 我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可对此提供了非类型安全的版本。 问题答案: 创建通用包装,如下所示: 将此类的实例添加到您的数组。 定义时,可以使用或。 另外,为了帮助获取数组内容,您可以按照以下方式进行操作: 上面的用法应替换为-但我不认为当前的Swift语言允许这样定义扩展。

  • 问题内容: 有以下代码: 显然,的调用以某种方式改变了类的属性和行为。 这是怎么发生的?如何在代码中使用这种方法? 示例代码是zope.interface模块的一部分。 问题答案: 详细的“会发生什么” 该函数检查框架堆栈并更改构造类的名称空间(python )。python语句中的所有内容都在该命名空间中执行,结果形成类主体。 该函数为类命名空间添加了额外的值,其中包含一些数据(已传递给该函数的

  • 我有以下代码: 但当我试着去看测试的内容时,我看到了这个 如果我试图看到什么是在任何项目的数组我得到一个错误: 有人能解释一下我做错了什么,正确的方法是什么吗? Visual Studio 2022, Blazor Webassup,.NET6.0 谢谢