我正在尝试做作业,但我卡住了。他们希望我拿一个已经给出的数组,把它分成两个数组,其中一个保存偶数,另一个保存奇数。我写了一个 void 函数,它接收 6 个参数,如下所示。函数中的 if 语句: ( if ((arr[j]%2) == 0)
( 由于某种原因没有被执行。它只是跳过它。我真的不明白为什么,我将不胜感激任何帮助。
尝试调试,对指针 Arr1 和 Arr2 使用不同的语法。
#include <stdio.h>
#include <malloc.h>
void separate(int* arr, int n, int* size1, int* size2, int* arr1, int* arr2);
int main()
{
int size1=0, size2=0;
int* newArr1 = NULL;
int* newArr2 = NULL;
int arr[] = { 6,57,14,21,11,3,22,42,9,15 };
printf("The array before change:n");
for (int i = 0; i <10; i++)
{
printf(" %d", arr[i]);
}
printf("n");
separate(arr, 10, &size1, &size2, newArr1, newArr2);
printf("The even array is:n");
for (int i = 0; i <size1; i++)
{
printf(" %d", newArr1[i]);
}
printf("n");
printf("The odd array is:n");
for (int i = 0; i <size2; i++)
{
printf(" %d", newArr2[i]);
}
printf("n");
system("pause");
return 0;
}
void separate(int* arr, int n, int* size1, int* size2, int* arr1, int* arr2)
{
int i, j;
for (i = 0; i < n; i++)
{
if (arr[i] % 2 == 0)
(*size1)++;
else
(*size2)++;
}
printf("n");
printf("size1: %d size2: %d", (*size1),(*size2));
arr1 = (int*)calloc((*size1), sizeof(int));
arr2 = (int*)calloc((*size2), sizeof(int));
for (j = 0; j < n; j++)
{
if ((arr[j]%2) == 0)
arr1[j] == arr[j];
}
for (j = 0; j < n; j++)
{
if (arr[j] % 2 != 0)
arr2[j]== arr[j];
}
return;
}
不编译
打开警告!您正在尝试使用"=="进行赋值 - 应该是"="。
gcc -std=c99 -Wall omg.c -o omg
omg.c: In function 'main':
omg.c:32:5: warning: implicit declaration of function 'system' [-Wimplicit-function-declaration]
system("pause");
^
omg.c: In function 'separate':
omg.c:55:9: warning: statement with no effect [-Wunused-value]
arr1[j] == arr[j];
^
omg.c:61:13: warning: statement with no effect [-Wunused-value]
arr2[j]== arr[j];
^
错误的
for (j = 0; j < n; j++) { if ((arr[j]%2) == 0) arr1[j] == arr[j]; }
想象一下j
是最后一个(n - 1
(。您将尝试将arr1[n - 1]
设置为任何内容,但arr1
的大小size1
不是n
。
正如其他人指出的那样,您正在使用==
来尝试分配值。
您的数组超出了范围,因为您在其他数组中只分配了足够的内存来保存正在排序的数组中的偶数/奇数的数量。我给你留下了评论。Idk 您使用什么编译器或 IDE,但我在 Visual Studio 上得到了这个工作,并对代码进行了一些其他更改。我也是学生!
void separate(int* arr, int n, int* size1, int* size2, int* arr1, int* arr2)
{
int i, j;
for (i = 0; i < n; i++)
{
if (arr[i] % 2 == 0)
(*size1)++;
else
(*size2)++;
}
printf("n");
printf("size1: %d size2: %d", (*size1), (*size2));
// Your assigning only enough space to hold the amount of even/odd numbers
arr1 = (int*)calloc((*size1), sizeof(int));
arr2 = (int*)calloc((*size2), sizeof(int));
// If the index of the array is larger than what you allocated, crash..
for (j = 0; j < n; j++)
{
if ((arr[j] % 2) == 0)
arr1[j] == arr[j];
}
for (j = 0; j < n; j++)
{
if (arr[j] % 2 != 0)
arr2[j] == arr[j]; // Use = to assign, not ==
}
return;
}