#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define N 7
void getArray1(int ar1[])
{
int i;
printf("Enter %d integers:", N);
for (i = 0; i < N; i++)
{
scanf("%d", &ar1[i]);
}
}
void getMax(int *p)
{
printf("Enter a max value greater than zero:");
scanf("%d", *p);
while (*p = 0 || *p < 0)
{
printf("Incorrect input, try again:");
scanf("%d", *p);
}
}
void fillRandom (int ar2[], int max)
{
int i;
for (i = 0; i < N; i++)
{
ar2[i] = rand() % (max+1);
}
}
void checkMatching(int ar1[], int ar2[], int ar3[])
{
int i, j=0, flag = 1;
for (i = 0; j < N; j++)
{
while (flag!=0)
{
if (ar1[i] == ar2[j])
flag = 0;
j++;
if (flag == 0)
j = 0;
}
if (flag == 1)
ar3[i] = ar1[i];
flag = 1;
}
}
void printMatching(int ar3[])
{
int i, flag = 0;
for (i = 0; i < N; i++)
{
if (ar3[i] != 0)
{
printf("%d", ar3[i]);
flag = 1;
}
}
if (flag == 0)
printf("All numbers from ar1 appear in ar2!");
}
void main()
{
int maxValue;
int ar1[N];
int ar2[N];
int ar3[N] = { 0 };
srand(time(NULL));
getArray1(ar1[N]);
getMax(&maxValue);
fillRandom(ar2[N], maxValue);
checkMatching(ar1[N], ar2[N], ar3[N]);
printMatching(ar3[N]);
}
我对编程非常陌生,这是我的一项任务。基本上,程序应该从用户获取一个数组,用从0到用户选择的值的随机数填充第二个数组,然后打印第一个数组中未出现在第二个数组中的元素。
我正在使用Visual Studio,程序编译正常,没有显示错误,但在键入7个数字后它崩溃(ConsoleApplication已停止工作),我只是无法找出原因。
答案 0 :(得分:1)
因为当你在该数组中放置7个以上的元素时,你会遇到溢出,你的程序会崩溃。要修复,您可以使用malloc并在输入新值时分配新内存。或者您可以检查用户是否输入了7个以上的条目。还编辑:我完全错了,错误在这一行:
scanf("%d", *p);
您将p的实际值传递给scanf,而不是其指针。修复:
scanf("%d", p);
答案 1 :(得分:0)
scanf("%d", *p);
应该是
scanf("%d", p);
在getMax
中,因为scanf需要传递变量的地址,p已经保存地址,*p
使其引用无效内存