Как я могу создать динамическую матричную структуру, используя только указатели? - PullRequest
0 голосов
/ 31 декабря 2018

Я делаю программу, в которой я могу использовать только указатели, то есть я должен загружать текстовый файл с буквенным супом без использования массивов.Каждая буква этого супа имеет 8 указателей вокруг, которые указывают на соседние буквы.

У меня уже есть структура кода, но я не могу сделать больше отсюда.

Кто-нибудь может помочь?

typedef struct letter           ///estrutura para cada letra da sopa
{
  char *lname;
  struct letter *Norte;
  struct letter *Sul;
  struct letter *Este;
  struct letter *Oeste;
  struct letter *Nordeste;
  struct letter *Sudeste;
  struct letter *Sudoeste;
  struct letter *Noroeste;
  struct letter *pnext;
} LETTER;

typedef struct soup         ///estrutura para a sopa de letras
{
  int lin;
  int col;
  LETTER *pfirst;
} SOUP;

void read_soup_txt(SOUP *pcs, char *fn, int lin, int col) {
  FILE *fp;
  fp = fopen(fn, "r");
  char c;
  if (fp != NULL) {
    pcs->lin = lin;
    pcs->col = col;
    LETTER *current = malloc(sizeof(LETTER)), *previous;
    pcs->pfirst = current;

    for (int i = 0; i < pcs->lin; i++)     ///linhas
        {
      for (int j = 0; i < pcs->col; j++)     ///colunas
          {
        fscanf(fp, "%c", &c);                     ///le o char
        current->lname = malloc(sizeof(char));       ///aloca espaço para o char
        strcpy(current->lname, &c);             ///copia o char para a estrutura
        previous = current;

        if (i == 0 && j == 0)           ///letra canto superior esquerdo
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i == 0 && j > 0 && j < pcs->col - 1)     ///primeira linha
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i == 0 && j == pcs->col - 1)      ///letra do canto superior direito
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i > 0 && i < pcs->lin && j == 0)     ///letras na coluna da esquerda
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i == pcs->lin - 1 && j == 0)     ///letra do canto inferior esquerdo
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i == pcs->lin - 1 && j > 0 && j < pcs->col - 1)      ///ultima linha
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i == pcs->lin - 1 && j == pcs->col - 1) ///letra do canto inferior direito
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i > 0 && i < pcs->lin - 1 && j == pcs->col - 1) ///letras da coluna direita
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        if (i > 0 && i < pcs->lin - 1 && j > 0 && j < pcs->col - 1) ///letras do meio do tabuleiro
            {
          current->Norte = NULL;
          current->Sul = NULL;
          current->Este = NULL;
          current->Oeste = NULL;
          current->Noroeste = NULL;
          current->Nordeste = NULL;
          current->Sudeste = NULL;
          current->Sudoeste = NULL;
        }

        previous->pnext = current;
      }

    }
  } else
    printf("Erro ao abrir arquivo!");
  fclose(fp);
}

1 Ответ

0 голосов
/ 31 декабря 2018

возможно, попробуйте прочитать все буквы в вашей структуре, тогда вы заполните указатели

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