比较两个数组并打印匹配元素的数量

时间:2015-03-31 13:54:59

标签: c

您好我正在尝试创建一个包含6个随机数的数组作为我的彩票号码,并将它们与我的票据进行比较,看看我有多少匹配。 我正在努力将指针作为函数参数传递。

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


int *get_lotto_draw(int n)
    {
        int i;
        static int lotto[6];

        int lottery[50];
        int u,j,temp;

        for (i =0; i<49; i++)
            lottery[i] = i+1;


        for (i =0; i<49; i++)
        {
            j = (rand()%49)+1;

            temp = lottery[i];
            lottery[i] = lottery[j];
            lottery[j] = temp;
        }

            for (i =0; i<6; i++)    
            {
                lotto[i] = lottery[i];
            }

        return lotto;           
    }

find_matches(int *lotto, int *ticket)
    {       
        int arrayReturn[sizeof(lotto) + sizeof(ticket)];
        int count = 0;
        int i;
        int j;
        for(i = 0; i < 6; i++)
        {
            for(j = 0; j < 6; j++)
            {
                if(lotto[i]==lotto[j])
                {
                    count = count + 1;

                }
            }
        }

        return count;
    }   


int main(int argc, char *argv[]) 
{
    int i, n = 6;
    int *lotto;
    int ticket[6] = {5, 11, 15, 33, 42, 43};

    srand(time(NULL));

    lotto = get_lotto_draw(n);

    int count = find_matches(&lotto[6], &ticket[6]);

    printf("%d\n\n", count);


    printf("Here is the array: ");
    for(i = 0 ; i < n ; i++) { 
        printf("%d ", lotto[i]); 
    }

    printf("\n\n");

    return 0;
}

3 个答案:

答案 0 :(得分:0)

下面:

int count = find_matches(&lotto[6], &ticket[6]);

您传递的lotto[6]ticket[6]地址是无效的数组元素。你其实想写

int count = find_matches(lotto, ticket);

相同
int count = find_matches(&lotto[0], &ticket[0]);

作为数组名称“衰减”到指向其第一个元素的指针。

还有其他问题!

  1. 函数声明:

    find_matches(int *lotto, int *ticket)
    

    缺少返回类型。使用

    修复它
    int find_matches(int *lotto, int *ticket)
    
  2. 数组声明

    int arrayReturn[sizeof(lotto) + sizeof(ticket)];
    

    错误为lottoticketint*。因此sizeof运算符返回int*的大小,而不是整个数组的大小。您必须对值进行硬编码或将大小作为参数传递给函数。

  3. 在函数get_lotto_draw中,我看不出lottery有50个索引的原因。你只需要6个。无论如何,也没有使用最后一个(49 th )索引。

答案 1 :(得分:0)

您的调用不正确,导致未定义的行为:

int count = find_matches(&lotto[6], &ticket[6]);

这会将指针传递给两个数组的一个结尾,因此find_matches会执行无效的解除引用。

调用您的函数的正确方法如下:

int count = find_matches(lotto, ticket);

或者如果您使用&运算符,

int count = find_matches(&lotto[0], &ticket[0]);

另请注意此声明

find_matches(int *lotto, int *ticket) ...

是ANSI之前的,因为省略了函数的返回类型(在这种情况下,C编译器假定int)。您应该更改声明以明确提供返回类型:

int find_matches(int *lotto, int *ticket) ...

答案 2 :(得分:0)

以下是进行比较的代码:

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


int *get_lotto_draw(int n)
{
    int i;
    static int lotto[6];

    int lottery[50];
    int j, temp;

    for (i = 0; i<49; i++)
        lottery[i] = i + 1;


    for (i = 0; i<49; i++){
        j = (rand() % 49) + 1;

        temp = lottery[i];
        lottery[i] = lottery[j];
        lottery[j] = temp;
    }

    for (i = 0; i<6; i++){
        lotto[i] = lottery[i];
    }

    return lotto;
}

int find_matches(int *lotto, int *ticket)
{
    int count = 0;
    int i;
    int j;
    for (i = 0; i < 6; i++){
        for (j = 0; j < 6; j++){
            if (lotto[i] == ticket[j]){
                count++;
            }
        }
    }

    return count;
}


int main(int argc, char *argv[])
{
    int i, n = 6;
    int *lotto;
    int ticket[6] = { 5, 11, 15, 33, 42, 43 };
    int count = 0;

    srand(time(NULL));

    lotto = get_lotto_draw(n);
    printf("\nHere is the lotto array: ");
    for (i = 0; i < n; i++) {
        printf("%d ", lotto[i]);
    }
    printf("\nHere is the ticket array: ");
    for (i = 0; i < n; i++) {
        printf("%d ", ticket[i]);
    }

    count = find_matches(lotto, ticket);

    printf("\ncount of matches: %d", count);
    getchar();
    return 0;
}