定义未知长度的二维数组,长度由用户输入,大家看下怎么弄?

int i,j,w,h,k,l,p,q,data[w][h],data2[w+2][h+2],temp[9];
printf("Please input the magic code\n");
scanf(%s,l);
printf("Please input width and height\n");
scanf(%s,w,h);
printf("Please input the maximum value\n");
scanf(%s,k);
printf("Please input the pixel values\n");
scanf(%s,data[w][h]);

要自己定义数组大小的话,要用到动态数组,关于动态数组,百度百科就有,针对你这个题目 我给出动态数组的定义和最终释放空间的代码
#include"stdio.h"
#include"stdlib.h" //动态分配的函数需要包含该头文件
int main()
{
int i,j,w,h,**data; //定义指向指针的指针,即表示二维数组名,只定义了分配相关变量,其他变量自己定义
printf("Please input width and height\n");
scanf("%d%d",&w,&h);
data=(int**)calloc(w,sizeof(int*)); //分配w个指针型的空间,即第一维
for(i=0;i<w;i++){
data[i]=(int*)calloc(h,sizeof(int));//分配h个int型的空间,即第二维
}
/*for(i=0;i<w;i++)
for(j=0;j<h;j++)
scanf("%d",&data[i][j]);
for(i=0;i<w;i++)
for(j=0;j<h;j++)
printf("%d ",data[i][j]);*/
.
.
.
.
.
.
for(i=0;i<w;i++){
free(data[i]);//释放第二维指针
}
free(data);//释放第一维指针
return 0;
}
中间注释掉的地方是我测试用的,测试了一会儿, .....的地方时你的代码!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-23
data[w][h],data2[w+2][h+2],数组定义时[]内是不能放入变量的,

scanf(%s,l); 要加引号和 & scanf("%d",&l);都是 int 型的,要用%d

scanf(%s,data[w][h]);也一样scanf(“%s”,&data[w][h]);
第2个回答  2010-10-23
#include<iostream>
using namespace std;

void main()
{
int i,j;
cout<<"请输入数组的行数和维数:";
cin>>i>>j;
int a,b;

//网络上搜索到的一个动态分配二维数组的方法,还有一个模板的方法,比较复杂就不说了
int ** m=new int*[i];
for(a=0; a<i; ++a) {
m[a]=new int[j];
}

//赋值过程
for(a=0;a<i;a++)
for(b=0;b<j;b++)
{
cout<<"请输入数组a["<<a<<"]["<<b<<"]的值:";
cin>>m[a][b];

cout<<endl;
}
//显示过程
for(a=0;a<i;a++)
{
for(b=0;b<j;b++)
{cout<<m[a][b]<<" ";}

cout<<endl;
}

system("pause");

}
第3个回答  2010-10-23
data[][],data2[][] 就好了,这个不能靠输入来解决
相似回答