Ir para conteúdo
Fórum Script Brasil
  • 0

[dúvida] Arquivos para structs em c


Bicsa

Pergunta

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 Bicsa
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...