Вы инициализируете размеры массива после объявления его !!!
Вы не можете использовать массивы переменной длины в C++. Прочитайте this ответ для получения дополнительной информации.
так, вы должны использовать std::vector
, как это:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int H, W;
cin >> W >> H;
std::vector< std::vector<int> > map;
map.resize(H); // H rows
for(int i = 0; i < H; ++i)
map[i].resize(W); // in every row, create W columns
// thus this is equivalent to a HxD array
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cin >> map[i][j];
}
}
cout << endl;
//Print
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cout << map[i][j] << " ";
}
}
cout << endl;
return 0;
}
Вы можете сделать это с массивом, но вы должны использовать динамическое выделение памяти, которое требует, чтобы отменить выделение памяти, когда вы сделано. Вот как это должно пойти:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int H, W;
cin >> H >> W;
int** map = new int*[H];
for(int i = 0; i < H; ++i)
map[i] = new int[W];
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cin >> map[i][j];
}
}
cout << endl;
//Print
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
cout << map[i][j] << " ";
}
}
cout << endl;
// DON'T FORGET TO FREE
for(int i = 0; i < H; ++i) {
delete [] map[i];
}
delete [] map;
return 0;
}
Я хочу, чтобы пользователь вводил размер массива, а затем вводил массив, а затем печатал – coolest111
@ coolest111, обновленный, разве это не то, что вы хотите? – gsamaras
спасибо, что это сработало .... ok нашел мою ошибку ... инициализирован до ввода переменных H, K – coolest111