在C中使用Array for Unknown数量的输入?

时间:2015-08-09 06:08:15

标签: c arrays

说,我想从用户那里获得几个整数输入。

可能是10,100,1000(或)10000个输入完全取决于用户。

我想将它们存储在数组中并根据需要引用任何第i个输入。

是否可以使用数组?

2 个答案:

答案 0 :(得分:0)

试试这个:

#include <stdio.h>
#include <stdlib.h>

int readNum()
{
    int c;
    int buffer = 0;
    while ((c = getchar()) != EOF && c != '\n' && c >= '0' && c <= '9')
    {
        buffer = (buffer * 10) + (c - '0');
    }
    return buffer;
}

int *readNumsToArray()
{
    size_t maxSize = 64;
    size_t i = 0;
    int *intArr = malloc(sizeof(*intArr) * maxSize);
    int buffer;
    while ((buffer = readNum()) != 0)
    {
        intArr[i++] = buffer;
        if (i == maxSize)
        {
            maxSize *= 2;
            intArr = realloc(intArr, sizeof *intArr * maxSize);
            if (intArr == NULL) break;
        }
    }
    if (buffer == 0)
        intArr[i] = buffer;
    return intArr;
}

int main()
{
    int *nums = readNumsToArray();
    size_t i = 0;
    while(nums[i] != 0)
    {
        printf("%d\n", nums[i++]);
    }
    return 0;
}

此程序接受数字直到0。 读取个别数字直到'\ n'字符。 如果你想要第i个元素,你只需输入nums [i]。

答案 1 :(得分:0)

您可以使用malloc功能。 如果您希望动态分配数组,可以使用以下代码:

   int * array = malloc(10 * sizeof(int));

这计算十个整数在内存中占用的字节数,然后从malloc请求多个字节并将结果分配给名为array的指针 当程序不再需要动态数组时,它应该调用free来将它占用的内存返回到免费存储:

free(array);

来源:Wikipedia

How do i declare an array of undefined or no initial size

Using array for unknown number of inputs in C