为什么输出不同,这段代码有什么不对?

Ahm*_*edO 0 c++ arrays c++98

所以我一直在尝试获取数组大小及其元素的输入,然后将元素显示到屏幕上,但是当我举例来说数组的大小:7数组的元素:1 2 3 4 5 6 7输出是:

1
2
3
4
5
6
6
Run Code Online (Sandbox Code Playgroud)

代码 :

#include <iostream>

using namespace std;

int main () {    
    int n , Arr[n];    
    cout << "please put the size of the array " ;    
    cin >> n;    
    cout << "please enter array's elemets ";    
    for (int k=0; k<n ; k++) {    
        cin >> Arr[k];    
    }    
    for (int i=0;i<n;i++){    
        cout << Arr[i] << endl;    
    }    
}
Run Code Online (Sandbox Code Playgroud)

bol*_*lov 5

int Arr[n]其中n不是编译时常量是非法的C++代码.一些编译器允许它作为扩展(可变长度数组).

即使使用VLA扩展,代码也是无效的,因为n在代码中使用时未初始化.

首先真正的解决方案:

使用std::vector(tadaaa):

#include <iostream>
#include <vector>

int main () {    
    int n;
    std::vector<int> arr;

    std::cout << "please put the size of the array " ;    
    std::cin >> n;

    arr.reserve(n); // optional

    std::cout << "please enter array's elemets ";
    for (int k=0; k<n ; k++) {
        int elem;
        std::cin >> elem;
        arr.push_back(elem);
    }

    for (auto e : arr) {
        std::cout << e << std::endl;    
    }    
}
Run Code Online (Sandbox Code Playgroud)

如果你需要针对C++ 98进行编译(哇):

for (std::vector<int>::iterator it = arr.begin(); it != arr.end(); ++it) {
    std::cout << *it << std::endl;    
}
Run Code Online (Sandbox Code Playgroud)

要不就:

for (std::size_t i = 0; i < arr.size(); ++i) {
    std::cout << arr[i] << std::endl;    
}
Run Code Online (Sandbox Code Playgroud)

如果你坚持使用VLA(我建议反对它):

int n;
cout << "please put the size of the array " ;    
cin >> n;    
int Arr[n];    

cout << "please enter array's elemets ";    
for (int k=0; k<n ; k++) {    
    cin >> Arr[k];    
}    
for (int i=0;i<n;i++){    
    cout << Arr[i] << endl;    
}
Run Code Online (Sandbox Code Playgroud)