venho andado procurando em forums e tópicos por ae e até agora não achei nada que ajudasse a resolver meu problema.
bom, estou desenvolvendo um trabalho para a faculdade envolvendo comunicação serial entre computadores, mas o meu problema se encontra na hora de copiar o dado para um campo da struct.
o meu objetivo nesta etapa do trabalho é: carregar as linhas de um arquivo de texto para uma lista encadeada dinâmica, tratando individualmente seus campos.
aqui vão exemplos de linhas no arquivo de texto:
/*
1 + 3 5
2 - 3 2
3 * 3 4
*/
cada caracter (separado por 1 único espaço) representa um campo a ser preenchido na struct, ( os sinais serão tratados como char por enquanto).
minha lógica consiste em carregar a linha toda em uma string e ir separando em uma string aux a primeira palavra (tirando o espaço).
depois, converter para int( quando nescessário) e inserir no campo da struct.
depois segue a lógica de lista encadeada direta normal..
Pergunta
Bicsa
olá pessoal,
venho andado procurando em forums e tópicos por ae e até agora não achei nada que ajudasse a resolver meu problema.
bom, estou desenvolvendo um trabalho para a faculdade envolvendo comunicação serial entre computadores, mas o meu problema se encontra na hora de copiar o dado para um campo da struct.
o meu objetivo nesta etapa do trabalho é: carregar as linhas de um arquivo de texto para uma lista encadeada dinâmica, tratando individualmente seus campos.
aqui vão exemplos de linhas no arquivo de texto:
/*
1 + 3 5
2 - 3 2
3 * 3 4
*/
cada caracter (separado por 1 único espaço) representa um campo a ser preenchido na struct, ( os sinais serão tratados como char por enquanto).
minha lógica consiste em carregar a linha toda em uma string e ir separando em uma string aux a primeira palavra (tirando o espaço).
depois, converter para int( quando nescessário) e inserir no campo da struct.
depois segue a lógica de lista encadeada direta normal..
eis a struct no "arquivo.h":
struct tdados {
int nop, op1, op2;
char sinal;
};
struct tnodo {
struct tdados dado;
struct tnodo * next;
} ;
o código ( na função que dá o erro) :
void load (char * fn, struct tnodo ** head) {
// pré-condicao: arquivo existir;
// pós-condicao: fila de strings carregadas em uma estrutura;
struct tnodo * aux = NULL;
struct tnodo * ult = NULL;
char *linha = (char*) malloc (255 * sizeof (char));
char *frente = (char*) malloc (255 * sizeof(char));
FILE * fp = fopen (fn,"r");
while (!eof(fp)) {
fgets (linha, 100, fp); // pega a linha inteira do arquivo;
if (head == NULL) {
head = (struct tnodo *) malloc (sizeof(struct tnodo));
//adcionar elementos em *head
car(linha, frente);
head->dado.nop = atoi(frente);
cdr(linha,linha);
car (linha, frente);
strcpy (head->dado.sinal,frente);
cdr (linha,linha);
car (linha, frente);
head->dado.op1 = atoi (frente);
cdr (linha, linha);
car (linha, frente);
head->op2 = atoi (frente);
//add na lista
head->next = NULL;
ult = head->next;
}
else
{
aux = (struct tnodo *) malloc (sizeof(struct tnodo));
//add elementos em *aux;
car(linha, frente);
aux->dado.nop = atoi(frente);
cdr(linha,linha);
car (linha, frente);
strcpy (aux->dado.sinal,frente);
cdr (linha,linha);
car (linha, frente);
aux->dado.op1 = atoi (frente);
cdr (linha, linha);
car (linha, frente);
aux->op2 = atoi (frente);
//add na fila;
ult->next = *aux;
ult->next = NULL;
}
} else printf("Erro na leitura do arquivo");;
close(fp);
};
a funcao void car consiste em pegar a primeira palavra de determinada string, e a void cdr consiste em pegar o resto.
O seguinte erro acontece no compilador :
" error: request for member 'dado' in something not a structure or union "
em todas as linhas que eu tento copiar para a struct.
se alguém puder me ajudar, fico grato
Editado por BicsaLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.