C语言 为什么"< “在到达”“时不转换为">”?

d7v8vwbk  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(143)

这是一个更大的程序的一部分,这个程序是一个游戏,用户必须在Map上导航。在这个函数中,“<”和“>”字符意味着向它们所指向的方向移动。如果他们到达Map的边界,用星号表示,他们应该变成相反的符号。我遇到的问题是'<'字符在到达星号时就消失了。相反,“>”的行为完全是它应该做的;当它在星号后面一个空格时,它反转,并开始向相反的方向移动。我真的不知道为什么'<'不做同样的事情,因为它实际上是相同的代码,但相反。任何帮助将不胜感激。
下面是我的代码:

  1. void moveCar(int rows, int cols, char **map) {
  2. int i, j;
  3. for (i = 1; i < rows; i+=2) {
  4. for (j = 0; j < cols; j++) {
  5. if (map[i][j] == '>') {
  6. if (j < cols - 1) {
  7. if (map[i][j + 1] == '.') {
  8. map[i][j + 1] = '>';
  9. map[i][j] = '.';
  10. break;
  11. }
  12. else if (map[i][j + 1] == '*') {
  13. map[i][j] = '<';
  14. }
  15. }
  16. }
  17. else if (map[i][j] == '<') {
  18. if (j > 0) {
  19. if (map[i][j - 1] == '.') {
  20. map[i][j - 1] = '<';
  21. map[i][j] = '.';
  22. }
  23. else if (map[i][j - 1] == '*') {
  24. map[i][j] = '>';
  25. }
  26. }
  27. }
  28. else {
  29. map[i][j] = '.';
  30. }
  31. }
  32. }
  33. }
xoefb8l8

xoefb8l81#

“<”字符在到达星号时消失的问题可能是由于内部循环中的break语句。当">“字符到达星号时,代码将其更改为”<“,然后中断内部循环。这意味着该行的其余部分不被处理,该行中存在的任何'<'字符都不会被更新。
另一方面,当'<'字符到达星号时,它被更改为'',但内部循环继续运行。这意味着如果该行中存在另一个'<'字符,则将处理和更新它。如果这个“<”字符也在星号上,它将被更改为"“,恢复先前的更改。
要修复此问题,可以从内部循环中删除break语句。这将确保正确处理和更新行中的所有字符。下面是更正的代码:

  1. void moveCar(int rows, int cols, char **map) {
  2. int i, j;
  3. for (i = 1; i < rows; i+=2) {
  4. for (j = 0; j < cols; j++) {
  5. if (map[i][j] == '>') {
  6. if (j < cols - 1) {
  7. if (map[i][j + 1] == '.') {
  8. map[i][j + 1] = '>';
  9. map[i][j] = '.';
  10. }
  11. else if (map[i][j + 1] == '*') {
  12. map[i][j] = '<';
  13. }
  14. }
  15. }
  16. else if (map[i][j] == '<') {
  17. if (j > 0) {
  18. if (map[i][j - 1] == '.') {
  19. map[i][j - 1] = '<';
  20. map[i][j] = '.';
  21. }
  22. else if (map[i][j - 1] == '*') {
  23. map[i][j] = '>';
  24. }
  25. }
  26. }
  27. else {
  28. map[i][j] = '.';
  29. }
  30. }
  31. }
  32. }

我想这对你有帮助...

展开查看全部
dl5txlt9

dl5txlt92#

<命中*之前,您就用.替换了*。我猜你的完整程序修复了*,并在第一列覆盖了<。因此,您需要额外的代码来保留*(也许从1开始j可能就足够了):

  1. void moveCar(int rows, int cols, char **map) {
  2. int i, j;
  3. for (i = 1; i < rows; i+=2) {
  4. for (j = 0; j < cols; j++) {
  5. if (map[i][j] == '>') {
  6. if (j < cols - 1) {
  7. if (map[i][j + 1] == '.') {
  8. map[i][j + 1] = '>';
  9. map[i][j] = '.';
  10. j++;
  11. }
  12. else if (map[i][j + 1] == '*') {
  13. map[i][j] = '<';
  14. }
  15. }
  16. }
  17. else if (map[i][j] == '<') {
  18. if (j > 0) {
  19. if (map[i][j - 1] == '.') {
  20. map[i][j - 1] = '<';
  21. map[i][j] = '.';
  22. }
  23. else if (map[i][j - 1] == '*') {
  24. map[i][j] = '>';
  25. }
  26. }
  27. }
  28. else if (map[i][j] != '*') {
  29. map[i][j] = '.';
  30. }
  31. }
  32. }
  33. }
展开查看全部

相关问题