我一直收到这些错误。我试图像游戏那样做一个扫雷。
well.c: In function 'main': well.c:170: warning: passing argument 1 of 'bombCheck' makes pointer from integer without a cast well.c:170: warning: passing argument 3 of 'bombCheck' makes integer from pointer without a cast well.c: In function 'fillGameBoard': well.c:196: error: expected declaration or statement at end of input
#include <stdio.h>
#include <stdlib.h>
#define Rows 5
#define Columns 5
#define Bombs 5
void introduction(void)
{
puts("Welcome to the minefield!");
puts("In this level 2 game, you will win by choosing.");
puts("all of the viable wells and not any of the.");
puts("tool breaker spaces. In both games, there are.");
puts("20 viable spaces and 5 tool breakers!");
puts("Have fun and good luck!");
}
void fillGameBoard(char gameBoard[][Columns])
{
int i, j;
FILE *inputFile;
char gameDataFileName[30];
int yes = 0;
do
{
printf("choose your spot");
printf("\nfield1 field2\n");
scanf(" %s",&gameDataFileName);
if ((inputFile = fopen(gameDataFileName,"r")) == NULL)
{
puts("\nWrong input! Try again!");
puts("check spelling, spacing, etc. make it exact!");
}
else
{
yes = 1;
}
} while (yes == 0);
for (i=0; i<Rows; i++)
{
for (j=0; j<Columns; j++)
{
fscanf(inputFile, " %c", &gameBoard[i][j]);
}
fclose(inputFile);
return;
}
void fillUserBoard(char userBoard[][Columns])
{
int i,j; // counters
for (i=0; i<Rows; i++)
{
for (j=0; j<Columns; j++)
{
userBoard[i][j] = '~';
}
}
return;
}
void displayBoard(char board[][Columns])
{
int i, j;
printf("\n ");
for (i = 1; i <= Rows; i++)
{
printf("%d ",i+5);
}
puts("");
for (i = 0; i <=Rows; i++)
{
printf("__");
}
puts("");
for (i=0; i<Rows; i++)
{
printf("%d|",(i+1));
for (j=0; j<Columns; j++)
{
printf(" %c", board[i][j]);
}
puts("");
}
return;
}
char bombCheck (char board[][Columns], int a, int b)
{
char gameOver;
if (board[a][b] == '*')
{
puts("");
puts(" BOOM");
puts("You hit a mine.");
puts("you are deaded.\n");
puts(" GAME OVER!!\n");
gameOver = 'y';
}
else
{
gameOver = 'n';
}
return gameOver;
}
int main (void)
{
char gameBoard[Columns][Rows];
char userBoard[Columns][Rows];
char done;
char win;
char gameOver;
int count;
int i;
int col;
int row;
introduction();
do
{
done=win='n';
count=0;
fillGameBoard(gameBoard);
fillUserBoard(gameBoard);
displayboard(userBoard);
bombcheck();
do
{
displayBoard(userBoard);
printf("choose your column, numbered 1-5\n");
scanf(" %i", &col);
printf("choose your row, numbered 1-5\n");
scanf(" %i", &row);
done = bombCheck(col, row, gameBoard);
if (done='n')
{
count+1;
if (count==((Columns*Rows)-Bombs))
{
printf("you win!\n");
done='y';
}
else
{
done='n';
userBoard[col][row]=gameBoard[col][row];
}
}
} while (done != 'y');
printf("do you want to play again? y/n \n");
scanf(" %c", win);
}while (win != 'y');
return 0;
}
答案 0 :(得分:5)
你错过了fillGameBoard()
中的大括号。
for (i=0; i<Rows; i++)
{
for (j=0; j<Columns; j++)
{
fscanf(inputFile, " %c", &gameBoard[i][j]);
} /* Note closing brace! */
}
fclose(inputFile);
您正以错误的顺序将参数传递给bombCheck()
。
/* Declared: char bombCheck (char board[][Columns], int a, int b) */
done = bombCheck(gameBoard, col, row);
没有参数的bombcheck()
调用是什么?请注意,bombcheck()
与bombCheck()
不同。 C编程语言区分大小写。
为了将来参考,请仅发布与您的问题相关的最小代码段,而不是整个程序。
答案 1 :(得分:2)
C. bombcheck
中的案例事项与bombCheck
不同。
论证顺序很重要。您已使用bombCheck
声明(board, a, b)
,但使用(col, row, board)
进行了调用。
获取阵列的地址是多余的。 &
scanf("%s",gameDataFileName);
带有scanf
的 %s
非常不安全。观察如果您键入超过30个字符(可能更多)会发生什么。请改为fgets
。
你错过了fillGameBoard
中的右括号(可能在第二个内部for
循环中)。
您的缩进在某些地方是不一致的,特别是在您保留对齐的return
语句(以及块末尾的其他一些语句)的情况下。
总的来说,这是一个非常好的初学者计划。坚持下去,您将立即熟悉这些编译器错误!
答案 2 :(得分:1)
缺少右括号}
以结束fillGameBoard
功能。
答案 3 :(得分:1)
打开和关闭括号的数量不会相加。
答案 4 :(得分:0)
第170行:参数的顺序错误
第51行:失踪}