Я написал небольшую программу, которая сравнивает два массива с произвольным размером массива. Всякий раз, когда я устанавливаю размер массива в 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";
    }
}
-1
Parsa Showkati 12 Апр 2019 в 10:19

2 ответа

Лучший ответ

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

int i = 0;

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

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

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

i = 0;

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

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

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

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

1
lubgr 12 Апр 2019 в 07:26
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";
}

Это сработает..

0
Sanket Kumar Mali 12 Апр 2019 в 07:30