所以我一直在尝试获取数组大小及其元素的输入,然后将元素显示到屏幕上,但是当我举例来说数组的大小: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)
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)