如何解决 while 循环中数组过载的问题

How to fix problem with array overload in while loop

本文关键字:数组 问题 循环 while 何解决 解决      更新时间:2023-10-16

我正在尝试修复程序中的SIGSEGV错误。我无法找到错误站点。该程序在Xcode中成功编译,但没有为我提供结果。

该程序的目标是检查相同的元素是否出现在三个单独的数组中,如果元素超过 2 个数组,则返回该元素。

#include <iostream>
using namespace std;
int main()
{
int i = 0 ,j = 0,k = 0;
int a[5]={23,30,42,57,90};
int b[6]={21,23,35,57,90,92};
int c[5]={21,23,30,57,90};
while(i< 5 or j< 6 or  k< 5)
{
int current_a = 0;
int current_b = 0;
int current_c = 0;
{   if (i<5) {
current_a = a[i];
} else
{
;;
}
if (j<6)
{
current_b = b[j];
} else
{
;;
}
if (k<5)
{
current_c= c[k];
} else
{
;;
}
}
int minvalue = min((current_a,current_b),current_c);
int countoo = 0;
if (minvalue==current_a)
{
countoo += 1;
i++;
}
if (minvalue==current_b)
{
countoo +=1;
j++;
}
if (minvalue==current_c)
{
countoo += 1;
k++;
}
if (countoo >=2)
{
cout<< minvalue;
}
}
}

我没有获得代码的任何输出。

这肯定不是你想做的

int minvalue = min((current_a,current_b),current_c);

如果min()的定义有意义(你真的应该为这样的问题提供一个MCVE(,你需要

int minvalue = min(min(current_a,current_b),current_c);

这将导致(a和b(和c的最小值,即所有三个中的最小值,而不是b和c的最小值。逗号运算符,对于理解这一点很重要。

这似乎是一个标志/计数器,用于在循环执行中做笔记或计算某些内容

int countoo = 0;

但是,如果您在循环中定义变量,则它不起作用。
您需要在while之前移动该行。

使用此行,您不会阻止索引离开数组的大小,
这很可能是段错误的源。

while(i< 5 or j< 6 or  k< 5)

为了防止段错误,请确保所有索引都保持足够小,
而不是至少只有一个。

while(i< 5 && j< 6 &&  k< 5)

(顺便说一句,我最初严重怀疑or可以编译。我想
用宏来or它可以,但我没有看到。它可能是我错过的最近C++标准更新中的新操作员...... 事实证明,情况确实如此。我在这里学到了一些东西。

这应该可以解决段错误。
为了实现代码的目标,我认为您需要在算法上花费一些额外的精力。我没有看到代码与目标相关。