迷宫结构错误

时间:2016-03-09 18:07:47

标签: c pointers struct maze

我正在编写一个程序来从文本文件中读取迷宫并将其传递给某些结构。如果迷宫太短或者里面有一个奇怪的字符,它应该通过结构逐行读出错误。一旦它通过所有要求,它就会被打印出来,但周围有一个边框( - 和|)。

但是有一些错误,我首先得到了“这里不允许函数声明”的错误。所以我将整个程序移到了main之上并且出现了更多错误。我觉得这是因为我可能需要解决的括号。我也注意到在某些领域它不会识别在结构内初始化的iRows。不完全确定那里发生了什么,因为它正确认识到iCols。

当我将CELL调用到我的第一个结构中时,为什么它根本不识别它?我是否需要将其设为int或将其定义为结构,以便它可以读取它?

我仍在努力调试一切,只是认为我会把它带来一些洞察力。我的一些指针不起作用,我已经完成并修复了一些错误,我似乎无法修复这些错误。

#include <stdio.h>
#include <stdlib.h>

typedef struct MQnode {
    CELL **ppCE;
    int iRows, iCols, iGoals, iStarts;
}MAZE;

typedef struct CEnode {
    char cglyph;

}CELL;

MAZE *
ReadMaze(FILE *fpIn)
{
    register int j, k, c;
    register MAZE *pMQRet;

    if ((MAZE *)0 == pMQRet = malloc(sizeof(MAZE)*1)) {
        if (2 != fscanf(fpIn, " %d,%d\n", &pMQRet->iRows, &pMQRet->iCols))  {
            EXIT_FAILURE;
        }

        if (2 > pMQRet->iRows || 2 > pMQRet->iCols) {
            EXIT_FAILURE;
        }

        if ((CELL *)0 == (pMQRet->ppCE = malloc(sizeof(CELL *)*iRows))) {
            EXIT_FAILURE;
        }
        //intialize goals and starts

        for (j=0; j<iRows;++j){
            if ((CELL*)0 == pMQRet->ppCE[j] = malloc((pMQRet->iCols+1)* sizeof(CELL))){
                EXIT_FAILURE;
            }
            for (k=0; k<pMQRet->iCols+1;++k){
                if (EOF ==(c = fgetc(fpIn))){
                    EXIT_FAILURE;
                }

            }
        }ppCE[j][k] = c;
    }
}return pMQRet;


void
PrintMaze(FILE *fpout, MAZE *pMQThis)
{
    register int j,k,l;
    register CELL *pCE;
    if ((MAZE *)0 == pMQThis){
        exit(0);
    }
    for (l=0;l<pMQThis->iCols+2;++1)
        fputc('-',fpout);
    for (j=0;j<pMQThis->iRows;++j){
        pCE = pMQThis->ppCE[j];
        fputc('|',fpout);
        for (k=0; k<pMQThis->iCols;++k)
            fputc(pCE[k], cglyph,fpout);
    }
    fputc('|',fpout);
    fputc('\n',fpout);
}
fputc('-',fpout);
return pCE;


int main(int argc, const char * argv[]) {


}//end of main

1 个答案:

答案 0 :(得分:0)

尽管我可以破译,但是这些代码的返工应该编译 - 我不是说它应该可以工作,但它应该编译并为你提供一个工作版本:

#include <stdio.h>
#include <stdlib.h>

typedef struct CEnode {
    char cglyph;
} CELL;

typedef struct MQnode {
    CELL **ppCE;
    int iRows, iCols, iGoals, iStarts;
} MAZE;

MAZE *
ReadMaze(FILE *fpIn)
{
    int j, k, c;
    MAZE *pMQRet;

    if ((MAZE *)0 == (pMQRet = malloc(sizeof(MAZE))))
    {
        exit(EXIT_FAILURE);
    }

    if (2 != fscanf(fpIn, " %d,%d\n", &pMQRet->iRows, &pMQRet->iCols))
    {
        exit(EXIT_FAILURE);
    }

    if (2 > pMQRet->iRows || 2 > pMQRet->iCols)
    {
        exit(EXIT_FAILURE);
    }

    if ((CELL **)0 == (pMQRet->ppCE = malloc(sizeof(CELL *) * pMQRet->iRows)))
    {
        exit(EXIT_FAILURE);
    }

    // initialize goals and starts

    for (j = 0; j < pMQRet->iRows; j++)
    {
        if ((CELL*)0 == (pMQRet->ppCE[j] = malloc(sizeof(CELL) * pMQRet->iCols + 1)))
        {
            exit(EXIT_FAILURE);
        }

        for (k = 0; k < pMQRet->iCols + 1; k++)
        {
            if (EOF == (c = fgetc(fpIn)))
            {
                exit(EXIT_FAILURE);
            }

            pMQRet->ppCE[j][k].cglyph = c;
        }
    }

    return pMQRet;
}

void
PrintMaze(FILE *fpout, MAZE *pMQThis)
{
    int j, k, l;
    CELL *pCE;

    if ((MAZE *)0 == pMQThis)
    {
        exit(EXIT_FAILURE);
    }

    for (l = 0; l < pMQThis->iCols + 2; l++)
    {
        fputc('-', fpout);
    }

    for (j = 0; j < pMQThis->iRows; j++)
    {
        pCE = pMQThis->ppCE[j];

        fputc('|', fpout);

        for (k = 0; k < pMQThis->iCols; k++)
        {
            fputc(pCE[k].cglyph, fpout);
        }

        fputc('|', fpout);
        fputc('\n', fpout);
    }

    for (l = 0; l < pMQThis->iCols + 2; l++)
    {
        fputc('-', fpout);
    }
}

int main(int argc, const char *argv[]) {

} // end of main

我建议您在构建较大的代码时编写并测试较小的代码块。祝你好运。