Получение ошибки в программе сравнения массивов в конкретном входе - PullRequest
0 голосов
/ 12 апреля 2019

Я написал небольшую программу, которая сравнивает два массива с произвольным размером массива.Всякий раз, когда я устанавливаю размер массива на 4, программа некорректно сравнивает четвертый член каждого массива.(когда я устанавливаю x в 4, четвертые элементы массива не сравниваются должным образом)

Это код:

#include <iostream>
using namespace std;

int main()
{
    int x;
    std::cin >> x;
    int i =1;
    int arr[x];
    int arr2[x];
    while(i <= x)
    {
        std::cout << "Enter row " << i << " of arr\n";
        std::cin >> arr[i];
        i++;
    }
    i = 1;
    while(i <= x)
    {
        std::cout << "Enter row " << i << " of arr2\n";
        std::cin >> arr2[i];
        i++;
    }
    for(int a = 0;a <= x;a++)
    {
        if(arr[a] == arr2[a])
            std::cout << "row " << a << " is true\n";
    }
}

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

У вас есть внешний доступ, который приводит к неопределенному поведению. Напомним, что индексы в сырых массивах начинаются с ноль , а не с единицы. Следовательно,

int i = 0;

- правильная инициализация индекса, в то время как первый цикл должен быть изменен на

while (i < x) { /* ... */ }

Затем присвоение i необходимо снова скорректировать до

i = 0;

и две оставшиеся петли до

while (i < x) { /* ... */ }

for (int a = 0; a < x; a++) { /* ... */ }

В качестве примечания вы используете массивы переменной длины (arr и arr2), что является нестандартным C ++ (см. этот поток для получения дополнительной информации). Предпочитайте std::vector для простого контейнера с зависимым от времени выполнения размером.

0 голосов
/ 12 апреля 2019
i = 1;
while(i <= x)
{
    std::cout << "Enter row " << i << " of arr2\n";
    std::cin >> arr2[i];
    i++;
}

вы сохраняете элемент в массиве, начинается с 1 индекса

for(int a = 0;a <= x;a++)
{
    if(arr[a] == arr2[a])
        std::cout << "row " << a << " is true\n";
}

Но сравнивая, начиная с 0 индекса. сохраняйте последовательность, либо начинайте с 0 или 1

for(int a = 1;a <= x;a++)
{
    if(arr[a] == arr2[a])
        std::cout << "row " << a << " is true\n";
}

это будет работать ..

...