【发布时间】:2012-03-27 00:28:42
【问题描述】:
我正在为学校做一个扫雷程序,但我的代码中不断出现此错误
无法分配常量大小为 0 的数组
我不知道为什么会这样;我没有分配大小 - 我将其设置为 0。另一个问题是,我如何通过 char 读取我的输入 char,以便将其保存在我的数组中?
如下所示,我使用的是输入和输出。我评论了我的输入和输出,所以你们可以看到我在这个程序中使用了什么。我想通过char 读取字符,以便将所有地图保存在数组中。
我正在使用 MSVC++2010。
freopen("input.txt","rt",stdin);
//4 4
//*...
//....
//.*..
//....
//3 5
//**...
//.....
//.*...
//0 0
freopen("output.txt","wt",stdout);
/*Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100*/
int n=-1;
int m=-1;
int cont =0;
while(n!=0 && m!=0)
{
scanf("%d %d",&n,&m);
int VMatriz[n][m]={0};
int Mapa[n][m]={0};
if (n==0 && m==0)
break;
cont++;
printf("Field #%d",cont);
for (int i=0;i<n;i++)
{ printf("/n");
for (int j=0;j<m;j++)
{
scanf("%d ",&Mapa[i][j]);
if (Mapa[i][j]=='*')
{
if (j-1>=0)
VMatriz[i][j-1]++;
if (j+1<m)
VMatriz[i][j+1]++;
if (i-1>=0)
VMatriz[i-1][j]++;
if (i+1<m)
VMatriz[i+1][j]++;
if (j-1>=0 && i-1>0)
VMatriz[i-1][j-1]++;
if (j-1>=0 && i+1<m)
VMatriz[i+1][j-1]++;
if (j+1<m && i-1>0)
VMatriz[i-1][j+1]++;
if (j+1<m && i+1<m)
VMatriz[i+1][j+1]++;
VMatriz[i][j]='*';
printf("%d",VMatriz[i][j]);
}
}
}
printf("/n");
}
return 0;
}
【问题讨论】:
-
重新标记为 C,因为代码似乎是这样。
-
@MikeKwan:伙计们,不要重新标记为 C,因为他使用的是 C++ 编译器(Visual Studio 没有显式编译为 C 代码),问题不是零大小的数组,这只是您看到的第二条错误消息。
-
Ed 是正确的,当您尝试在 Visual Studio 中编译这样的代码时,您将首先看到常量表达式错误,然后是零大小错误。
-
不知道为什么有人会投票结束这个问题,这是一个完全有效的问题(初学者可以理解的问题)。
-
@Giuseppe:请随时通过选择答案并发布有关您当前问题的新线程来解决此线程(假设您找不到涵盖该问题的现有线程)
标签: c++ visual-c++