打印一个包含不在arr2中的arr1数字的数组

时间:2015-12-15 23:26:08

标签: c

我写了一个程序:

  1. 通过用户输入
  2. 获取整数到arr1 [3]
  3. 获得另一个输入 - 称为最大数字。
  4. arr2 [3]随机获得3个数字,范围从0到maxNumber。 例如如果我输入数字4,那么arr2 []将包含从0到3(包括)的3个整数。
  5. 4.Build arr3 [3]包含arr1 [3]的整数,在arr2 [3]中不是对于例如如果arr1 [3] = 1 2 3,arr2 [3] = 2 5 6,则arr3 [3] = 1 3 垃圾

    1. 打印arr3 []。
    2. 奇怪的问题:由于某种原因,它只打印arr3 [ 0 ],这是arr1 [ 2 ]的值。有什么建议吗?

      td p {
          text-align: left;
      }
      

2 个答案:

答案 0 :(得分:1)

当你调用inputArr3()时,你将count3作为参数传递给它(它会进入你的堆栈),然后你操纵值(在堆栈中)但你的count3变量(在{{1中定义)绝不会改变。

您可能希望将指针传递给count3,例如:

main

当您调用该功能时,您必须将其更改为:

void inputArr3(int arr1[], int arr3[], int i, int *count3)
{
...
  (*count3)++;
}

另一个问题是当你调用inputArr3(arr1, arr3, i, &count3); 时 - 你用2个参数调用它,而它需要一个。我建议您将呼叫更改为printArr3,如下所示:

printArr3

不要忘记修改你的函数原型。

答案 1 :(得分:1)

我希望这是你需要的,因为很难理解:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define N 3


int main(void){
    int arr1[N];
    int arr2[N];
    int arr3[N];
    int found = 0;
    int a,b,i,j,k=0,t=0;
    int maxNumber = 8;

    srand((unsigned)time(NULL));

    /* create Arr1 */
    for (a = 0; a < N; a++){
        arr1[a] = (rand() % maxNumber);
    }

    /* create Arr2 */
    for (a = 0; a < N; a++){
        arr2[a] = (rand() % maxNumber);
    }

    /* Print Arr1 */
    printf("Arr1\n");
    for (b = 0; b < N; b++){
        printf("%d ",arr1[b]);
    }

    /* Print Arr2 */
    printf("\nArr2\n");
    for (b = 0; b < N; b++){
        printf("%d ",arr2[b]);
    }

    /* create Arr3 */
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            if(arr1[t] == arr2[j]){
                found++;
            }
        }

        if(!found){
            arr3[k]=arr1[t];
            k++;
        }

        found=0;
        t++;
    }

    /* Print Arr3 */
    printf("\nArr3\n");
    for(int u=0;u<k;u++){
        printf("%d ",arr3[u]);
    }
    printf("\n");
    return 0;
}

输出1:

Arr1
0 4 2 
Arr2
6 1 2 
Arr3
0 4

输出2:

Arr1
6 0 1 
Arr2
0 7 5 
Arr3
6 1

输出3:

Arr1
7 2 7 
Arr2
7 5 6 
Arr3
2