【发布时间】:2019-07-19 12:38:40
【问题描述】:
我正在尝试做作业,但我卡住了。他们希望我取一个已经给出的数组并将其分成两个数组,其中一个保存偶数,另一个保存奇数。我写了一个 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;
}
不编译
【问题讨论】:
-
你好......如果你说它在运行时做一件事并且它不编译......通常当你遇到这样的情况时,你似乎有两个问题注意你的编译器警告/错误是很好的,一旦你修复了这些,有时事情:just work™...
-
@David Bu “为什么if语句不执行”和“不编译”是什么关系?
-
您不能从
void main()发送return 0;。你应该使用int main(void)。 -
@VladfromMoscow 好吧,“编译”是“执行”的先决条件。 ;-)
-
当你调用
separate时,newarr1和newarr2在调用方不会被修改。这是经典的,仔细阅读this SO article