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

时间:2019-08-22 05:17:08

标签: c++ algorithm while-loop

我正在尝试在程序中修复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;
       }
   }
}

我没有得到任何代码输出。

1 个答案:

答案 0 :(得分:1)

这肯定不是您想要的

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 ++标准更新中的新操作符... 事实证明确实如此。我在这里学到了一些东西。

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