我写了一个程序:
4.Build arr3 [3]包含arr1 [3]的整数,在arr2 [3]中不是对于例如如果arr1 [3] = 1 2 3,arr2 [3] = 2 5 6,则arr3 [3] = 1 3 垃圾
奇怪的问题:由于某种原因,它只打印arr3 [ 0 ],这是arr1 [ 2 ]的值。有什么建议吗?
td p {
text-align: left;
}
答案 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