二维数组C++(输入和打印)
//Variable Description
int H,W;
int map[H][W];
//Input
cin>>W>>H;
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;
我的输出是:
3 3
1 2 3
4 5 6
7 8 9
789789789
为什么我不能在我的输出让所有的数字吗?为什么只是最后一行?
在声明它之后,您正在初始化数组的大小!你不能在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;
}
你的陈述int map[H][W];
打算腾出足够的空间来容纳所有的数字。但它不知道还有多少空间(W和H在你声明map
时未定义)。所以它会清除一些随机的(可能为零,可能很大的)空间量,这取决于H和W所占据的内存插槽所包含的内容。要动态地分配内存,你需要这样做(a)在之后H和W是已知的,并且(b)使用new
关键字(用“C++中的动态内存分配”你在那里,当你完成它时,找出为什么它也很重要delete [] map
)。
避免动态分配的唯一方法是声明一个已知**的数组,至少和必要的一样大,然后检查用户对H和W的输入是否超过此数。 (其实,你必须要有理智的检查H和W。) – jez 2014-11-04 01:22:43
Jez你说得对,对不起!以我的+1作为道歉(因为你是对的)。 :) – gsamaras 2014-11-04 02:10:28
错误,以及不开始一种奇怪的反火焰战争,但我认为你*是正确的。我*最初*认为你错了,因为我认为你不能从非常量H和W静态地初始化一个数组。但是,然后,好奇,我试着用g ++(Apple LLVM v。6.0)编译你的例子,上班。所以你是对的。 (但是:这可能是你所遵循的C++标准的一个函数--- C++ 98或C++ 11。它肯定不会在普通的C中工作。):) – jez 2014-11-04 02:20:08
我想用户输入数组的大小,然后输入数组,然后打印 – coolest111 2014-11-04 01:17:18
@ coolest111,已更新,是不是你想要的? – gsamaras 2014-11-04 01:17:43
感谢这工作....确定发现我的错误...初始化之前输入变量H,K – coolest111 2014-11-04 01:21:53