如何解决 while 循环中数组过载的问题
How to fix problem with array overload in 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;
}
}
}
我没有获得代码的任何输出。
这肯定不是你想做的
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++标准更新中的新操作员...... 事实证明,情况确实如此。我在这里学到了一些东西。
这应该可以解决段错误。
为了实现代码的目标,我认为您需要在算法上花费一些额外的精力。我没有看到代码与目标相关。
相关文章:
- 数组C++问题中最大和第二大的数字
- 二维数组问题
- 数组问题:变量周围的堆栈'arr'已损坏
- 无符号字符数组问题
- 数组问题(if (zeds[i].x == zeds[i].x))
- 字符数组问题
- C++中的turbo数组问题
- 输入和输出的2D字符数组问题
- 多维数组问题
- 指针和数组指向数组问题
- 如何随机排列数组问题
- C++ 多维数组问题 - 多次打印条目
- C++ 2D 读入数组问题
- C++读入 2D 数组问题
- 指针和多维数组问题
- C++多项式类,指针数组问题
- 在数组问题(C++)中查找偶数
- 二维std::数组问题
- 向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++
- 指针数组问题