C++数组存储错误的值

Rad*_*dya 0 c++ arrays numbers

我试着输入两个数组,A和B.但每次我输入最后一个B数,除了它改变了B [i + n]的值,它还替换了A [0]的值.这是代码:

#include <iostream>

    using namespace std;

    /*
     * 
     */
    int main(int argc, char** argv) {
        int a[] = {};
        int b[] = {};
        int t, i;

        cout << "Amount of numbers: ";
        cin >> t;

        for (i = 0; i < t; i++) {
            cout << "Enter number for A" << i+1 << ": ";
            cin >> a[i];
            cout << "Enter number for B" << i+1 << ": ";
            cin >> b[i];
        }

        for (i = 0; i < t; i++) {
            cout << a[i] << " ";
            cout << b[i] << " ";
        }
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

例如

Amount of numbers: 2
Enter number for A1: 1
Enter number for B1: 2
Enter number for A2: 3
Enter number for A3: 4
Run Code Online (Sandbox Code Playgroud)

输出应该是1 2 3 4,但是从代码我得到4 2 3 4(B [1]替换A [0]的值.

有人可以帮我解决这个问题吗?谢谢

Jac*_*ack 8

问题是您正在使用具有未指定大小的两个堆栈分配的数组,因为您初始化它们是0 { }.

这些数组不是动态的,你不能像你一样添加元素.它们的大小必须直接指定或通过初始化指定,并且在编译时保留在堆栈中,这意味着如果您尝试访问a超过其大小的元素,那么您将最终进入,b因为它们存储在其旁边其他.

std::vector<int>改为使用两个,这样你就可以做到

std::vector<int> a;
..
a.resize(t);
..
cin >> a[i]
Run Code Online (Sandbox Code Playgroud)