我怎样才能在c中修复这些错误?

时间:2010-08-17 07:27:00

标签: c

我一直收到这些错误。我试图像游戏那样做一个扫雷。

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;
}

5 个答案:

答案 0 :(得分:5)

  1. 你错过了fillGameBoard()中的大括号。

    for (i=0; i<Rows; i++) 
    { 
    
            for (j=0; j<Columns; j++) 
            { 
    
                    fscanf(inputFile, " %c", &gameBoard[i][j]); 
            } /* Note closing brace! */
    } 
    fclose(inputFile); 
    
  2. 您正以错误的顺序将参数传递给bombCheck()

    /* Declared: char bombCheck (char board[][Columns], int a, int b) */ 
    done = bombCheck(gameBoard, col, row);
    
  3. 没有参数的bombcheck()调用是什么?请注意,bombcheck()bombCheck()不同。 C编程语言区分大小写。

  4. 为了将来参考,请仅发布与您的问题相关的最小代码段,而不是整个程序。

答案 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行:失踪}