【问题标题】:Function keeps returning true, cant find mistake?函数一直返回true,找不到错误?
【发布时间】: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};这样的输入吗?

标签: c++ arrays function loops


【解决方案1】:
  1. 你应该关心数组大小不相等,你可能想要 在这种情况下说假
  2. 如果不使用函数的返回类型,请指定其返回 键入void
  3. 您可以在 for 循环中进行一次比较来处理它。
  4. 另一个大问题是使用运算符&lt;= 和操作数sizeofA。您应该使用运算符&lt;,否则您会超出数组的范围,这可能会导致您的程序崩溃。

请调查以下代码。

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,然后在确定这些数组是否相同时返回truefalse。将函数的结果赋值给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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2015-09-07
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多