C如何检查阵列是否已满?

时间:2013-10-28 10:05:00

标签: c

我有一个数组:array [3] [3]

只要数据不满,我就会让用户将数据输入到数组中。一旦数组变满,我想阻止用户向其中插入更多数据。

9 个答案:

答案 0 :(得分:2)

C没有数组边界检查。你必须自己做。使用变量来跟踪已插入的项目数,并在计数器等于数组大小时停止。

答案 1 :(得分:2)

您无法检查“阵列是否已满”。要做你想做的事,在向数组添加元素的同时跟踪索引。

答案 2 :(得分:1)

您需要跟踪用户插入的数据。当计数器达到阵列大小时,阵列已满。 :D C中没有其他方法可以实现此结果,因为它没有提供任何方法来验证数组中有多少元素。

答案 3 :(得分:1)

引入一个变量来计算填充的单元格数。每当向数组添加/删除数据时,都会调整此变量。然后,为了检查您的阵列是否已满,只需检查此变量是否等于阵列中的单元格总数。

答案 4 :(得分:1)

我认为最简单的方法是使用calloc()动态分配内存,您可以在其中将数组元素初始化为例如零。您可以通过检查数组中的最后一个元素是否仍为零来检查数组是否已满。当然,如果最后一个元素仍然为零,则表示数组未满。

答案 5 :(得分:0)

首先,这不是数组而是矩阵(也就是数组数组)。你已经知道矩阵的尺寸为3x3,然后你可以这样做:

int x, y;
int array[3][3];

for (x = 0; x<2; x++)
{
    for (y = 0; y<2; y++)
    {
        //I assume that it is an array of int
        printf("Insert number at %d - %d" ,x,y);
        scanf("%d" ,&array[x][y]);
    }
}

现在用户只能插入3 * 3 = 9个值。

答案 6 :(得分:0)

无法在C中进行数组绑定检查。但是,通过更好的编码实践,我们检查数组是否已满。

例如,在你的数组中考虑一个[3] [3],你不希望有一些特定的值。这个价值可能是任何东西! 0xFF或0或整数范围内的任何内容!并且你必须确保永远不会将值作为数组的输入,然后你可以验证你的数组a [3] [3]是否已满!

/*part of coed in main*/
/*here initialize the array with 0, assuming that 0 will never be a part of array a[3][3]*/
for(i=0; i<3; i++)
{
    for(j=0;j<3;j++)
    {
        a[i][j] = 0;   // assuming that 0 will never be a part of array a[3][3]
    }
}

while(CheckArray(**a)!=0)
{
    printf("give array input:\n")
    scanf("%d", &a[row][column]); //writing to empty cell of an array
}

//CheckArray code
int CheckArray(int a[][])
{
    for(i=0; i<3; i++)
    {
        for(j=0;j<3;j++)
        {
            if(a[i][j] == 0)   // assuming that 0 will never be a part of array a[3][3]
            {
                row = i;      // row and column must be global variables in this example!
                column = j;   // row and column must be global variables in this example!
                return 1;
            }
            else
            {
                // no need to do anything here
            }
        }
    }

    //if code reaches here then array is full!
    printf("Array is full.\n");
    return 0;
}

您仍然可以优化上述代码!这只是通过更好的编码实践检查数组是否已满的一种方法!

答案 7 :(得分:0)

使用getter / setter函数将行为封装到结构中,以检查所需向量的最大长度:

typedef varvector
        varvector;

struct varvector {
    int length;
    void* vector;
};

varvector* varvector_create(int length) {
    varvector* container = malloc(sizeof(varvector));
    void* vector = malloc(length);
    if(container && vector) {
        container->vector = vector;
    }
    return(container);
}
void varvector_destroy(varvector* container) {
    free(container.vector);
    free(container);
}

varvector_get(varvector* container, int position) {
    if(position < container.length) {
        return(container->vector[position]);
    }
}
varvector_set(varvector* container, int position, char value) {
    if(position < container.length) {
        container->vector[position] = value
    }
}

面向对象编程是一种设计模式,它恰好在某些语言中具有语法支持,而在C中恰好没有语法支持。

这并不意味着您不能在工作中使用此设计模式,这只是意味着您必须使用已经为您提供此功能的库(glib,{{ 1}})或者如果您只需要这些功能的一小部分,请编写自己的基本功能。

答案 8 :(得分:0)

如果可能,您可以将数组中的所有元素初始化为某个值,否则程序将认为该值是“非法”或“无效”。例如。一组正数可以初始化为全-1。或者可以将字符数组初始化为所有NULL字符。 然后,只要查看最后一个元素,如果它被设置为默认值。

measurement = sizeof(myarray) / sizeof(element); //or just a constant
while(myarray[measurement-1] == defaultvalue){
   //insert code here...
}