簡體   English   中英

如何在C中初始化未知大小的數組

[英]how to initialize array of unknown size in c

我正在為C語言編程課的入門做作業。

我需要編寫一個程序來查看大小未知的int數組(我們將得到一個初始化列表作為要使用的測試用例),並確定該數組中的所有重復項。

為了確保不會發現已經重復的元素,我想對原始元素使用一個並行數組,該數組將保存所有重復元素的數量。

我需要此數組的大小與原始數組的大小相同,當然,在給定初始化程序列表之前,我們當然並不真正知道它。

我嘗試使用sizeof()實現此目的,但是Visual Studio說這是錯誤的,因為變量大小( const int size = sizeof(array1); )不是恆定的。 我沒有正確使用sizeof嗎? 還是這種邏輯有缺陷?

也許還有另一種方法可以解決這個問題,但是我還沒有想出辦法。

這是下面包含的代碼,希望注釋不要太難閱讀。

// Dean Davis
// Cs 1325
// Dr. Paulk
// Duplicates hw

#include <stdio.h>

int main()
{
    int array1[] = {     0,0,0,0,123,124,125,3000,3000,82,876,986,345,1990,2367,98,2,444,993,635,283,544,    923,18,543,777,234,549,864,39,97,986,986,1,2999,473,776,9,23,397,15,822,1927,1438,1937,1956,7, 29,- 1 };
const int size = sizeof(array1);
int holdelements[size]; 
int a = 0; // counter for the loop to initialize the hold elements array
int b = 0; // counter used to move through array1 and be the element number of the element being tested
int c = 0; // counter used to move through holdelements and check to see if the element b has already been tested or found as duplicates
int d = 0; // counter used to move through array1 and check to see if there are any duplicates 
int e = 0; // counter used to hold place in hold element at the next element where a new element number would go. sorry if that makes no sense
int flag = 0; // used as a boolian to make sure then large while loop ends when we reach a negative one value.
int flag2 = 0; // used as a boolian to stop the second while loop from being infinite. stops the loop when the end of hold elements has been reached
int flag3 = 0; // used to close the third while loop; is a boolian
int numberofduplicates=0;// keeps track of the number of duplicates found

for (a; a < size; a++)
{
    if (a == (size - 1))
        holdelements[a] = -1;
    else
        holdelements[a] = -2;
}

while (!flag)
{
    flag2 = 0;
    flag3 = 0;
    if (array1[b] == -1)
        flag = 1;
    else
    {
        while ((!flag) && (!flag2))
        {
            if (holdelements[c] == -1)
                flag2 = 1;
            else if (array1[b] == holdelements[c])
            {
                b++;
                c = 0;
                if (array1[b] == -1)
                    flag = 1;
            }
        }
        while (!flag3)
        {
            if (array1[d] == -1)
                flag3 = 1;
            else if (array1[b] == array1[d] && b != d)
            {
                printf("Duplicate of %d, index %d, was found at index %d.\n", array1[b], b, d);
                holdelements[e] = d;
                d++;
                e++;
                numberofduplicates++;
            }
        }
    }
    b++;
}
printf("Total Duplicates Found: %d\n", numberofduplicates);
return 0;
}

重做以下內容:

const int size = sizeof(array1)/sizeof(int);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM