Как я могу исправить эти ошибки в C? - PullRequest
0 голосов
/ 17 августа 2010

Я продолжаю получать эти ошибки. Я пытаюсь сделать игру похожей на мойку.

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 ]

5 голосов
/ 17 августа 2010
  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(). Язык программирования Си чувствителен к регистру.

Для дальнейшего использования опубликуйте только минимальные фрагменты кода, относящиеся к вашему вопросу, вместо всей программы.

2 голосов
/ 17 августа 2010

Дело имеет значение в C. bombcheck не то же самое, что bombCheck.

Порядок аргумента имеет значение.Вы объявили bombCheck с (board, a, b), но вызываете его с (col, row, board).

Извлечение адреса массива является излишним.& не требуется в scanf("%s",gameDataFileName);

scanf с %s довольно небезопасно.Посмотрите, что произойдет, если вы введете более 30 символов (возможно, значительно больше).Вместо этого попробуйте fgets.

В fillGameBoard (вероятно, во втором внутреннем цикле for) отсутствует закрывающая скобка.

В некоторых местах ваши отступы противоречивы, особенногде вы оставили выровненные операторы return (и некоторые другие операторы в конце блоков).

В целом, это довольно хорошая программа для начинающих.Продолжайте в том же духе, и вы быстро узнаете об этих ошибках компилятора!

1 голос
/ 17 августа 2010

Количество открывающих и закрывающих скобок не складывается.

1 голос
/ 17 августа 2010

Отсутствует закрывающая скобка } для завершения функции fillGameBoard.

0 голосов
/ 17 августа 2010

строка 170: неправильный порядок аргументов

строка 51: отсутствует}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...