嘿伙计,所以我正在研究这个代码,找到相同的数字并显示它们,到目前为止结果只是随机数我需要帮助。
int main(void){
int arr[10] = {1, 2, 3, 4, 5, 4, 8 ,8, 9, 10};
int i;
int j;
int same[10];
int ctr = 0;
for(i = 0; i < 10; i++){
for(j = 10; j > 0;j--){
if(arr[i] == arr[j]){
same[ctr++] = arr[i];//store the similar numbers
}
}
}
for(i = 0; i < 10; i++){
printf("%d", same[i]);
}
getch();
return 0;}
答案 0 :(得分:1)
你自相矛盾。对于相同的数组,您使用两种不同的索引方案!!
0
建立索引到9
10
索引1
。内部循环索引为off-by-one,从而访问超出范围的内存,无效。这会导致undefined behavior。
你需要成功
for(j = 9; j >= 0;j--)
之后,您尝试打印same
数组中所有元素的值,而所有(或none )元素实际上,可能没有为值赋值。您将自动变量保留为未初始化,从而包含不确定的值。由于变量从未采用其地址,因此尝试使用该值将再次导致UB。
也就是说,一旦找到匹配项,您就可以使用continue
跳转到外部循环。
答案 1 :(得分:0)
在9处开始第二个循环(j
循环)并转到0。
答案 2 :(得分:0)
我在codechef编译器上运行了你的代码,它给出了一个运行时错误。因为在你的ctr ++步骤中,ctr的值超过了相同[]的数组的大小。
此外,在您的代码中,您将一个元素与自身进行比较,因此每个数字都将打印在列表中(因为i == j可能是一个可能的情况)
如果您在其中包含条件i!=j
或迭代j from i+1 to 9
,那么最好不要进行自我比较。以下是相同代码的工作片段(您的for循环): -
for(i = 0; i < 10; i++){
for(j = 10; j > 0;j--){
if(arr[i] == arr[j] && i!=j){
same[ctr] = arr[i];//store the similar numbers
ctr++;
cout<<ctr<<" ";
}
}
}