gpt4 book ai didi

C - 在 2D 数组扫雷中循环到 "plant mines"不起作用

转载 作者:行者123 更新时间:2023-11-30 16:10:50 25 4
gpt4 key购买 nike

我的任务是为 C/C++ 类创建一个简单的扫雷克隆。它需要使用 10x10 字符 2D 数组作为雷区。

我需要在 field 上随机放置 5 个地雷。空白处应使用空格(' ')填充,而有地雷的位置应使用井号('#')填充。

这是创建二维数组的代码。该数组在 main() 函数外部(上方)声明,但在 main() 函数内部初始化:

...
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

static char minefield[10][10];

main(){

for (int row = 0; row < 10; row++){
for (int colm = 0; colm < 10; colm++){
minefield[row][colm] = ' ';
}
}
...

这样,我声明了数组并用空格填充了所有空格。我有一些代码来打印数组,它似乎包含其他字符。 但是,我无法判断这段代码是否确实用空格或其他内容(例如 null)填充了数组。

接下来,我认为问题所在的部分:埋设地雷。地雷将被放置在阵列中的五个随机位置,这是经过处理的通过 for 循环。循环还会检查空间是否被占用,并会继续循环,直到成功放置五个地雷。

...  
srand(time(0)); //Defining seed for random

int randRow;
int randColm;

for (int count = 0; count < 5;){
randRow = rand() % 10;
randColm = rand() % 10;
if (minefield[randRow][randColm] != ' '){ //tests if space is occupied
continue;
}
minefield[randRow][randColm] = '#'; //planting the mine
count++;
}
...

通过一些调试,我发现代码似乎停止/挂起

minefield[randRow][randColm] = '#';

此时,程序刚刚终止并打印几秒钟的执行时间。

我的 IDE 似乎没有报告任何错误(我正在使用 Codeblocks)。

我做错了什么?

最佳答案

注意:

我在未显示的代码中犯了一个错误。我直接将变量放入 put() 函数中(例如,puts(variable)),而不是使用 printf(例如 printf("%c",variable)),这会导致程序挂起。

直到我看到一个名为 repl.it 的网站,该网站有一个调试器,可以向我显示问题所在。

如果给大家带来不便,我们深表歉意。但无论如何还是谢谢你帮助我!

附注有人知道如何在我的 Codeblocks IDE 中拥有此功能吗?当我使用 Eclipse IDE for Java 时,包含了此调试,但由于某种原因,Codeblocks 中没有包含此调试。我对使用 IDE 的经验很少。

关于C - 在 2D 数组扫雷中循环到 "plant mines"不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58787284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com