请帮帮我。我找不到什么是错的。其中一个括号在if语句中有问题,但我找不到它。
26错误:'('token
之前的预期标识符#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 20
#define COLS 20
int main();
int i, j, direction, x, y;
char board[ROWS][COLS];
srand ((unsigned) time(NULL));
for(i=0; i < ROWS; i++)
for(j=0; j < COLS; j++)
board[i][j] = '.';
x = rand() % 20;
y = rand() % 20;
board[x][y] = '*';
direction = rand() % 8;
if (board[x][y+1] != '.') && (board[x+1][y] != '.') && (board[x-1][y] != '.') && (board[x][y-1] != '.')
&& (board[x+1][y+1] != '.') && (board[x-1][y+1] != '.') && (board[x+1][y-1] != '.') && (board[x-1][y-1] != '.')
break;
switch (direction) {
case 0: if (board[x][y+1] == '.'){
y++;
break; }
case 1: if (board[x+1][y] == '.'){
x++;
break; }
case 2: if (board [x-1][y] == '.'){
x--;
break; }
case 3: if (board[x][y-1] == '.'){
y--;
break;}
case 4: if (board[x+1][y+1] == '.'){
x++;
y++;
break;}
case 5: if (board[x-1][y+1] == '.'){
x--;
y++;
break;}
case 6: if (board[x+1][y-1] == '.'){
x++;
y--;
break;}
case 7: if (board[x-1][y-1] == '.'){
x--;
y--;
break;}
}
for(i=0; i < ROWS; i++){
for(j=0; j < COLS; j++)
printf("%2d", board[i][j]);
printf("\n");
}
return 0;
}
我想创建一个大小为20 * 20的数组,然后用点打印在屏幕上。然后我将随机选择一个坐标并在rand定义的坐标中打印一个'*'图标。我想移动数组中的*。我试着写它,但我不知道它是否会起作用。
答案 0 :(得分:2)
你似乎错过了很多'{'和'}'(特别是在主循环上?)。如果它们之后只有一行,那么你并不总是需要将它们放在循环和语句中,但这是一个很好的编码实践,它可以帮助你更快地找到你的问题。如果仍然无效,我建议您这样做并编辑您的答案。
答案 1 :(得分:1)
if (board[x][y+1] != '.') && (board[x+1][y] != '.') && (board[x-1][y] != '.') && (board[x][y-1] != '.')
&& (board[x+1][y+1] != '.') && (board[x-1][y+1] != '.') && (board[x+1][y-1] != '.') && (board[x-1][y-1] != '.')
应该是
if ((board[x][y+1] != '.') && (board[x+1][y] != '.') && (board[x-1][y] != '.') && (board[x][y-1] != '.')
&& (board[x+1][y+1] != '.') && (board[x-1][y+1] != '.') && (board[x+1][y-1] != '.') && (board[x-1][y-1] != '.'))
您需要附上所有这些条件。
虽然有条件执行的唯一声明是紧随其下的break
。
答案 2 :(得分:1)
编译错误来自:
if (board[x][y+1] != '.') &&
if
的正确语法是:
if ( condition )
statement;
如果你有多个测试,那么你需要将它们全部组合成一个条件;在这种情况下:
if ( (board[x][y+1] != '.') && (board[x+1][y] != '.') /* && ... */ )
break;
在这种情况下,我建议在{ }
周围使用break;
,即使它只是一个语句,因为它是如此之大if
。< / p>
然而,这个测试实际上是不必要的。您正在测试switch
中测试的相同条件,因此没有必要对它们进行两次测试。您可以完全删除if
。
在switch
内,break;
语句应位于if
块之外。无论您是否找到匹配的.
,您都不想进入下一个案例。
答案 3 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 20
#define COLS 20
int main(void)
{
int i, j, direction, x, y;
char board[ROWS][COLS];
srand ((unsigned) time(NULL));
for(i=0; i < ROWS; i++)
for(j=0; j < COLS; j++)
board[i][j] = '.';
x = rand() % 20;
y = rand() % 20;
board[x][y] = '*';
direction = rand() % 8;
if ((board[x][y+1] != '.') && (board[x+1][y] != '.') && (board[x-1][y] != '.') && (board[x][y-1] != '.') && (board[x+1][y+1] != '.') && (board[x-1][y+1] != '.') && (board[x+1][y-1] != '.') && (board[x-1][y-1] != '.'))
return;
switch (direction) {
case 0: if (board[x][y+1] == '.')
y++;
break;
case 1: if (board[x+1][y] == '.')
x++;
break;
case 2: if (board [x-1][y] == '.')
x--;
break;
case 3: if (board[x][y-1] == '.')
y--;
break;
case 4: if (board[x+1][y+1] == '.'){
x++;
y++;
}
break;
case 5: if (board[x-1][y+1] == '.'){
x--;
y++;
}
break;
case 6: if (board[x+1][y-1] == '.'){
x++;
y--;
}
break;
case 7: if (board[x-1][y-1] == '.'){
x--;
y--;
}
break;
}
for(i=0; i < ROWS; i++) {
for(j=0; j < COLS; j++)
printf("%2d", board[i][j]);
printf("\n");
}
return 0;
}
如上所述 - 您没有对if语句加倍。另外,一个单独的休息声明并没有做任何事情。你的意思是返回(退出)?