函数一直返回true,找不到错误?
Posted
技术标签:
【中文标题】函数一直返回true,找不到错误?【英文标题】:Function keeps returning true, cant find mistake? 【发布时间】:2018-11-18 12:04:26 【问题描述】:我需要编写一个函数,该函数将采用两个数组及其大小,然后比较单元格是否相等。 如果单元格相等,则如果不是假,则必须返回真。 但是我似乎找不到我的错误,它一直返回 true。
#include <iostream>
using namespace std;
bool XArray(int a[],int b[],int sizeofA,int sizeofB, bool& v)
for (int i = 0; i <= sizeofA && i <= sizeofB;i++)
if (a[i]==b[i])
return v;
continue;
else
v = false;
break;
return v;
int main()
bool x = true;
int a[3] = 1,2,3,;
int b[3] = 1,2,7;
XArray(a,b,3,3,x);
cout << x << endl;
return 0;
【问题讨论】:
你在逐行调试代码时观察到了什么? 你试过像int a[3] = 1,2,3; int b[3] = 2,3,4;
这样的输入吗?
【参考方案1】:
-
你应该关心数组大小不相等,你可能想要
在这种情况下说假
如果不使用函数的返回类型,请指定其返回
键入
void
。
您可以在 for 循环中进行一次比较来处理它。
另一个大问题是使用运算符<=
和操作数sizeofA
。您应该使用运算符<
,否则您会超出数组的范围,这可能会导致您的程序崩溃。
请调查以下代码。
void XArray(int a[],int b[],int sizeofA,int sizeofB, bool& v)
v= true;
if( sizeofA != sizeofB )
v=false;
else
for (int i = 0; i < sizeofA; i++)
if (a[i] != b[i])
v= false;
break;
PS:我觉得这个函数应该返回bool
,不需要带最后一个参数v。你可以试着自己做个练习。
【讨论】:
你说得对,我不需要将 bool 作为参数,但是我该如何返回呢?有点糊涂 删除参数v
,然后在确定这些数组是否相同时返回true
或false
。将函数的结果赋值给main中的变量x
,像这样x = XArray(a,b,3,3)
;
那么我将不得不将函数更改为 int not void 以便我可以返回对吗?我对将结果分配给它会做什么有点困惑?
您可以在我们将 false 分配给 v 的地方返回 false,并在函数结束时返回 true。【参考方案2】:
您应该尝试逐行调试代码。看来您是编码新手,解决问题时应注意以下几点:
如果您将 a[i] 与 b[i] (a[i]==b[i]) 进行比较,则返回 'v'。但是你不应该在这个块中做任何事情。因为在返回值之前需要等待检查所有数组元素。
【讨论】:
【参考方案3】:你不应该返回 if(a[i] == b[i])。这样函数在找到第一个相等对后返回。而是遍历每一对单元格,如果它们不相等则返回。遍历所有内容后返回 true。您可以检查大小是否也相等。如果不是,那么您肯定知道数组不相等。您也不需要 bool 引用。
【讨论】:
我删除了 return v;从第一个 if 语句开始,现在它似乎工作了,这是你的意思吗? 是的。顺便说一句,你真的需要 v 参数吗?似乎是多余的。【参考方案4】:也许你正在尝试这样做:
bool XArray(int a[],int b[],int sizeofA,int sizeofB, bool& v)
for (int i = 0; i < sizeofA && i < sizeofB; i++)
if (a[i]!=b[i]) return false;
return v;
【讨论】:
以上是关于函数一直返回true,找不到错误?的主要内容,如果未能解决你的问题,请参考以下文章
错误:函数返回 None 或在没有返回语句的情况下结束。但在哪里找不到? [复制]