'c++ main function use two times of function

Write a function, equalsArray that when passed two int arrays of the same length that is greater than 0 will return true if every number in the first array is equal to the number at the same index in the second array. If the length of the arrays is less than 1 the function must return false. For example, comparing the two arrays, {1,2,3,4,5} and {1,2,3,4,5} would return true but the two arrays {3,7} and {3,6} would return false. You should start by copying the function-1-1.cpp file and name it function-3-1.cpp. Then add the function equalsArray to the new file.

The main function for this problem must call your readNumbers function twice, then pass both new arrays to your equalsArray function, display the result as true or false and finally delete the array. The main function in the file main-3-1.cpp.

The signature for your new function is:

bool equalsArray(int *numbers1,int *numbers2,int length) ;

This is my code, and i try to use the int* readNumber two times.

#include <iostream>

using namespace std;

int* readNumbers()
{

    int* a = new int[10];
    for (int i = 1; i < 11; i++) {

        int x;
        cin >> x;
        a[i] = x;
    }
    a++;
    return a;
    // delete[] a;
}

bool equalsArray(int* numbers1, int* numbers2, int length)
{
    if (length >= 1) {
        for (int i = 0; i < length; i++) {
            if (numbers1[i] == numbers2[i]) {
            }
            else {
                return false;
            }
        }
        return true;
    }

    // delete[] numbers1;
    // delete[] numbers2;

    int main()
    {
        int* arr1 = readNumbers();
        int* arr2 = readNumbers();
        equalsArray(arr1, arr2, 10);
        return 0;
    }

There there is an error,control reaches end of non-void function. How to improve my code?

Thank you all.

Expect result:

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

True(1)


Solution 1:[1]

OK, first I will show you your code, with comments where the errors are.

Then I will show you a fixed version. And, at the end, a little bit more robust C++ soultion.

I know that you learn in school all this nasty stuff with pointers, decayed pointers for arrays, C-style arrays,pointers for owned memory, new and delete.

That is basically bad. It should never be used in C++.

Anyway. Teachers still think like that. What a pity . . .

OK. You code with comments:

#include <iostream>

using namespace std; // Should not be used

int* readNumbers()
{

    int* a = new int[10];              // Do not use C-style arrays, pointer for owned memory, new and delete
    for (int i = 1; i < 11; i++) {     // Will lead to out of bound error

        int x;             // Why using additional variables?
        cin >> x;
        a[i] = x;       
    }
    a++;                   // Wrong
    return a;              
    // delete[] a;         // Not here
}

bool equalsArray(int* numbers1, int* numbers2, int length)
{
    if (length >= 1) {
        for (int i = 0; i < length; i++) {
            if (numbers1[i] == numbers2[i]) {
            }
            else {
                return false;
            }
        }
        return true;
    }
                            // Here nothing will be returned
}                           // Closing bracket misding


    // delete[] numbers1;     // Not here
    // delete[] numbers2;     // Not here

int main()
{
    int* arr1 = readNumbers();
    int* arr2 = readNumbers();
    equalsArray(arr1, arr2, 10);
    return 0;                        // No output
}                                    // No Release of memory


Next, your fixed code


#include <iostream>

using namespace std;

// Function to read a given numbers of values and returns them in a dynaimcally allocated array
int* readArrayOfNumbers(int numberOfValuesToRead) {

    // Allocate a new array for the given amount of integers
    int* dynamicArrayOfIntegers = new int[numberOfValuesToRead];

    // Read all values in a loop from user via std::cin
    for (int index = 0; index < numberOfValuesToRead; ++index) {
        cin >> dynamicArrayOfIntegers[index];
    }
    return dynamicArrayOfIntegers;
}

// Compare 2 arrays with same size
bool equalsArray(int* numbers1, int* numbers2, int length) {
    // We assume in the beginning that the arrays will be equal
    bool result = true;

    // We will only compare arrays, if they contain data
    if (length >= 1) {

        // Now compare arrays element by element
        for (int i = 0; i < length; i++) {

            if (numbers1[i] != numbers2[i]) {
                // If not equal then set result to false and stop loop
                result = false;
                break;
            }
        }
    }
    else {
        // No data in array. Consider as not equal
        result = false;
    }
    return result;
}                           

int main()
{
    // Define size of arrays
    const int sizeOfArray = 10;

    // Get 2 arrays in dynamically allocated arrays
    int* array1 = readArrayOfNumbers(sizeOfArray);
    int* array2 = readArrayOfNumbers(sizeOfArray);

    // Compare both arrays
    const bool arraysAreEqual = equalsArray(array1, array2, sizeOfArray);

    // Show result
    if (arraysAreEqual)
        std::cout << "\nTrue(1)\n";
    else
        std::cout << "\nFalse(0)\n";

    // Release memory
    delete[] array1;
    delete[] array2;
} 

And finally, the C++ solution

#include <iostream>
#include <iomanip>
#include <array>

constexpr size_t NumberOfElements = 10u;
using MyType = int;
using MyArray = std::array<MyType, NumberOfElements>;

int main() {

    // Define arrays
    MyArray myArray1{};
    MyArray myArray2{};

    // Read values
    for (size_t i{}; (i < NumberOfElements) and (std::cin >> myArray1[i]); ++i)
        ;
    for (size_t i{}; (i < NumberOfElements) and (std::cin >> myArray2[i]); ++i)
        ;
    // If all numbers could be read . . .
    if (std::cin) {
        // Show result of comparison
        std::cout << '\n' << std::boolalpha << (myArray1 == myArray2) << '(' << (myArray1 == myArray2) * 1 << ")\n";
    }
    else std::cerr << "\n*** Error. Invalid input data\n";
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Armin Montigny