c - 如何仅使用指针创建动态矩阵结构?
问题描述
我正在做一个只能使用指针的程序,也就是说,我必须在不使用数组的情况下加载带有字母汤的文本文件。这道汤的每个字母周围都有 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);
}
解决方案
也许尝试阅读结构的所有字母,然后填充指针
推荐阅读
- python - 无法保存模型架构(bilstm + attention)
- python-3.x - 无法通过 pyspark 从镶木地板中读取一列,而其他列被正确读取
- java - MappingException:在实现 AbstractElasticsearchConfiguration 时找不到 PersistentEntity
- c++ - 从特定容器类型(指向自身的指针)泛化类的成员
- arrays - 检查字符串中的每个字符是否在数组c ++中可用
- python - 使用子进程执行 python 脚本时 Cron 作业失败
- javascript - 使用 exec() 运行命令 - Node.js
- r - R Parallel EasyABC 或 smfsb:ABC-SMC
- json - json文件未在本机反应中更新
- visual-studio - Visual Studio 2019 退出并显示“Docker 命令失败,退出代码 -1073741515”