这是一个更大的程序的一部分,这个程序是一个游戏,用户必须在Map上导航。在这个函数中,“<”和“>”字符意味着向它们所指向的方向移动。如果他们到达Map的边界,用星号表示,他们应该变成相反的符号。我遇到的问题是'<'字符在到达星号时就消失了。相反,“>”的行为完全是它应该做的;当它在星号后面一个空格时,它反转,并开始向相反的方向移动。我真的不知道为什么'<'不做同样的事情,因为它实际上是相同的代码,但相反。任何帮助将不胜感激。
下面是我的代码:
void moveCar(int rows, int cols, char **map) {
int i, j;
for (i = 1; i < rows; i+=2) {
for (j = 0; j < cols; j++) {
if (map[i][j] == '>') {
if (j < cols - 1) {
if (map[i][j + 1] == '.') {
map[i][j + 1] = '>';
map[i][j] = '.';
break;
}
else if (map[i][j + 1] == '*') {
map[i][j] = '<';
}
}
}
else if (map[i][j] == '<') {
if (j > 0) {
if (map[i][j - 1] == '.') {
map[i][j - 1] = '<';
map[i][j] = '.';
}
else if (map[i][j - 1] == '*') {
map[i][j] = '>';
}
}
}
else {
map[i][j] = '.';
}
}
}
}
2条答案
按热度按时间xoefb8l81#
“<”字符在到达星号时消失的问题可能是由于内部循环中的break语句。当">“字符到达星号时,代码将其更改为”<“,然后中断内部循环。这意味着该行的其余部分不被处理,该行中存在的任何'<'字符都不会被更新。
另一方面,当'<'字符到达星号时,它被更改为'',但内部循环继续运行。这意味着如果该行中存在另一个'<'字符,则将处理和更新它。如果这个“<”字符也在星号上,它将被更改为"“,恢复先前的更改。
要修复此问题,可以从内部循环中删除break语句。这将确保正确处理和更新行中的所有字符。下面是更正的代码:
我想这对你有帮助...
dl5txlt92#
在
<
命中*
之前,您就用.
替换了*
。我猜你的完整程序修复了*
,并在第一列覆盖了<
。因此,您需要额外的代码来保留*
(也许从1开始j
可能就足够了):