这是代码中没有编译的部分。它会在它到达时开始然后停止。我有[11] [22]的Char Map,这是我的董事会。我要做的是让'*'随机生成,并作为我的蛇的食物。
srand(time(NULL));
int pellet=rand()%21;
while (GameRunning == true)
{
for (int pellet = rand(); pellet % Map[11][22]; pellet++)
{
cout << '*';
}
system("cls");
答案 0 :(得分:5)
如果Map
是char的二维数组:
char Map[11][22];
问题在于这一行:
pellet % Map[11][22]
您正在地图中的越界条目上应用模数。
可以从第一维的0 to 10
和第二维的0 to 21
索引地图。例如,Map[0][0]
是有效条目,Map[4][7]
也是如此,但Map[11][22]
不是有效条目。
在这个越界条目中,偶然的值恰好为0,导致除以零错误(计算n mod 0
会导致此错误)。
为了尽可能简单地解释,将二维数组视为网格。在您的情况下,网格有11行和22列。
所以现在你想要达到那个网格上的某个点,比如第三行,第五列。要做到这一点,你会说Mat[2][4]
。它不是Mat[3][5]
的原因是在C ++中,数组索引从0开始,而不是1.现在给出这个,你正在访问Mat[11][22]
,这是一行和一列超出范围。
是的,您声明数组的大小为11行和22列,但这仅在告诉C ++数组的大小时(声明数组时)。当您需要访问数组中的各种元素时,必须使用基于0的索引来获取您感兴趣的条目。
跟进:任何好的C ++书籍都会比我更详细地解释这一点。