为什么我的C程序没有运行?

时间:2017-05-29 13:57:56

标签: c

#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已停止工作),我只是无法找出原因。

2 个答案:

答案 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使其引用无效内存