C:为什么这段代码不起作用?

时间:2017-05-22 19:54:48

标签: c

需要有关此代码的帮助,它应返回c[],其号码为a[] % b[] = 0,但不起作用。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *divide(int a[], int a_size, int b[], int b_size)
{
    int i = 0, j = 0, k = 0, counter = 0, *c;
    c = (int*)malloc(b_size * sizeof(int));

    for (i = 0; i < b_size; i++)
    {
        for (j = 0; j < a_size; j++)
        {
            if (a[j] % b[i] == 0)
                counter++;
        }

        c[k] = counter;
        k++;
        counter = 0;
    }

    for (int t = 0; t < b_size; t++)
    {
        printf("%d ", c[t]);
    }
    printf("\n");
}

main ()
{
    int *a, *b, a_size, b_size;

    printf("Enter size of a:\n");
    scanf ("%d", &a_size);
    a = (int*)malloc(a_size * sizeof(int));

    printf("\nEnter size of b:\n");
    scanf("%d", &b_size);
    b = (int*)malloc(b_size * sizeof(int));

    printf("\nEnter elements of a:\n");
    for (int i = 0; i < a_size; i++)
    {
        scanf("%d", &a[i]);
    }


    printf("\nEnter elements of b:\n");
    for (int j = 0; j < b_size; j++)
    {
        scanf("%d", &b[j]);
    }


    divide(&a, a_size, &b, b_size);
}

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些错误。

你希望你的fonction * divide(...)返回一个包含a [i]%b [i]操作的新数组,但是你的函数没有返回任何东西,所以你必须返回它。在main中打印新数组似乎比在函数中打印更合乎逻辑。

当您将变量传递给函数时,请小心传递int *,而不是int **。

下面是一个有效的代码示例(如果a_size和b_size不同,你没有说明该做什么,所以我假设我们只使用最小的尺寸而不是处理后的数字):< / p>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *divide(int a[], int a_size, int b[], int b_size)
{
int i = 0, stop, *c;

if (b_size <= a_size)
{
    c = (int*)malloc(b_size * sizeof(int));
    stop = b_size;
}
else
{
    c = (int*)malloc(a_size * sizeof(int));
    stop = a_size;
}

while (i < stop)
{
    c[i] = a[i] % b[i];
    i++;
}
return (c);
}

int main ()
{
int *a, *b, a_size, b_size;
int *result = NULL;
int stop;
int i = 0;

printf("Enter size of a:\n");
scanf ("%d", &a_size);
a = (int*)malloc(a_size * sizeof(int));

printf("\nEnter size of b:\n");
scanf("%d", &b_size);
b = (int*)malloc(b_size * sizeof(int));

printf("\nEnter elements of a:\n");
for (int i = 0; i < a_size; i++)
{
    scanf("%d", &a[i]);
}


printf("\nEnter elements of b:\n");
for (int j = 0; j < b_size; j++)
{
    scanf("%d", &b[j]);
}


result = divide(a, a_size, b, b_size); //not &a neither &b because it would be a char** instead of a char*
if (a_size < b_size)
    stop = a_size;
else
    stop = b_size;
while (i < stop)
{
    printf("%d ", result[i]);
    i++;
}
return 0;
}