您好我正在尝试创建一个包含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;
}
答案 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]);
作为数组名称“衰减”到指向其第一个元素的指针。
还有其他问题!
函数声明:
find_matches(int *lotto, int *ticket)
缺少返回类型。使用
修复它int find_matches(int *lotto, int *ticket)
数组声明
int arrayReturn[sizeof(lotto) + sizeof(ticket)];
错误为lotto
,ticket
为int*
。因此sizeof
运算符返回int*
的大小,而不是整个数组的大小。您必须对值进行硬编码或将大小作为参数传递给函数。
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;
}