Функция продолжает возвращать истину, не можете найти ошибку? - PullRequest
0 голосов
/ 18 ноября 2018

Мне нужно написать функцию, которая будет принимать два массива и их размер, а затем сравнивать, равны ли ячейки.Если бы ячейки были равны, он должен будет вернуть true, если не false.Однако я не могу найти свою ошибку, она продолжает возвращаться к истине.

#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;
}

Ответы [ 4 ]

0 голосов
/ 18 ноября 2018
  1. Вам следует позаботиться о том, чтобы у вас не было массивов одинакового размера, в этом случае вы можете захотеть сказать false
  2. Если вы не используете тип возвращаемого значения функции, укажите тип возвращаемого значения как void.
  3. Вы можете справиться с этим одним сравнением в цикле for.
  4. Другая большая проблема - использование оператора <= с операндом 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. Вы можете попробовать сделать это самостоятельно в качестве упражнения.

0 голосов
/ 18 ноября 2018

может быть вы пытаетесь сделать это:

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;
}
0 голосов
/ 18 ноября 2018

Вы должны постараться отлаживать код построчно.Похоже, что вы новичок в кодировании, вот точка, на которую вы должны обратить внимание, чтобы решить проблему:

Где вы сравниваете [i] с b [i] (a [i] == b[я]) вы возвращаете 'V'.Но вы ничего не должны делать в этом блоке.Потому что вам нужно подождать, чтобы проверить все элементы массива, прежде чем возвращать значение.

0 голосов
/ 18 ноября 2018

Вы не должны возвращать if (a [i] == b [i]).Таким образом, функция возвращается после нахождения первой равной пары.Вместо этого переберите каждую пару ячеек и вернитесь, если они не равны.После перебора всего верните true.Вы можете проверить, равны ли размеры.Если нет, то вы точно знаете, что массивы не равны.Вам также не нужна ссылка на bool.

...