Почему мой массив выводит элемент, которого нет в нем? - PullRequest
0 голосов
/ 08 ноября 2019

У меня все еще есть та же проблема странного числа в моих массивах, но на этот раз в другой функции:

#include <iostream>

using namespace std;

//First Array
int n[20];
int i, a;
//Second Array
int n2[20];
int i2, a2;

void arraySelection();
void printArrays();
void unionArray();
void intersectionArray();

int main(){ 

    arraySelection();

    printArrays();

    intersectionArray();

    unionArray();

    return 0;
}

void arraySelection(){

    cout << "First array size: ";
    cin >> a;

    cout << "Array elements: " << endl;;

    for (i = 0; i < a; i++){
        cin >> n[i];
    }

    cout << "\nSecond array size: ";
    cin >> a2;

    cout << "Array elements: " << endl;;

    for (i2 = 0; i2 < a2; i2++){
        cin >> n2[i2];
    }

}

void unionArray(){

    const int riemp = 40;       
    int unionNums[riemp];
    int j, x, y, z;
    bool t = false;

    for (j = 0; j <= riemp; j++){
        unionNums[j] = n[j];
        cout << unionNums[j] << " ";
    }

}

В основном я пытаюсь скопировать числа моего первого массива n [20] вмой массив unionNums [40]. Это действительно так, но также выводит серию 0 и другие большие странные числа. 2 дня в пути и до сих пор не знаю. (PS Если я попытаюсь передать фиксированные числа в массив, так что избавляясь от пользовательского ввода, это не вызывает никаких проблем) Я также не стал копировать свои функции intersectionArray и printArray, поскольку они делают вещи, которые мне больше не нужнына данный момент

1 Ответ

4 голосов
/ 08 ноября 2019

Здесь вы читаете в элементах до n[a-1]:

for (i = 0; i < a; i++){
    cin >> n[i];
}

Таким образом, все элементы до n[a-1] инициализируются. Затем вы печатаете все элементы до n[a], однако.

for (i = 0; i < a+1; i++){ // note that you have "a+1" here, not just "a"
    cout << n[i] << " - ";
}

n[a] не было инициализировано. Когда вы читаете это, это неопределенное поведение. Это часто проявляется в получении значения мусора, которое вы видите в своих результатах. То же самое происходит во втором массиве / цикле, где вы пишете в массив для i2 < a2, но получаете вывод для i2 < a2+1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...