I'm trying to implement this implementation in C. I'm having two problems.
First: Inside the main, I log the data I want and when I enter the list I get a problem.
Second: My data reading function "print_dates" gives error when compiling. I am using the codeblocks and the following message appears "invalid type argument of '->'".
I partially understood that "->" is pointer signaling and that to access my record data is not necessary the pointer, since the node has been accessed and we are looking for the internal statistical information. However, I would like a more detailed explanation if possible.
#include <stdio.h>
#include <stdlib.h>
typedef struct registro_st{ // sequência de objetos do mesmo tipo
char login[50];
char nome[50];
float valor;
struct registro *prox;
} registro;
typedef struct nodo_st{
registro dado;
struct nodo *prox;
} nodo;
typedef struct Lista_st{
nodo *cabeca;
nodo *cauda;
int tamanho;
} lista;
nodo* CriarNodo(registro p){
nodo* n;
n = (nodo*)malloc(sizeof(nodo));
n->dado = p;
n->prox= NULL;
return n;
}
void criarLista(lista *l){
return NULL;
}
void insere_ini(lista *l, registro dado){
nodo* novo = (nodo*)malloc(sizeof(nodo));
if(novo=NULL){
return 0; //falta de espaço
};
novo->dado = dado;
novo->prox = l->cauda; //antigo primeiro aponta para o próximo
l->cauda = novo; // novo nodo recebe ponteiro para começo
return novo;
}
//FUNÇÕES PARA UTILIZAR NO MAIN
void imprime_nomes(nodo* lista){ // função que imprime os valores
nodo* p;
for(p = lista; p != NULL; p = p->prox){
printf("Nome eh: %s\n", p->dado->nome);
}
}
void criar_registro(registro *p){
printf("Qual login para registro:\n");
scanf("%s", &p->login);
printf("Qual o nome do contato:\n");
scanf("%s", &p->nome);
printf("Qual valor para registrar:\n");
scanf("%f", &p->valor);
}
int main(){
registro p1_main;
lista p2_main;
nodo p3_main;
char escolha;
printf("Gostaria de registrar contatos?\n");
printf("Digite -->>!! sim!! <<-- para registrar e -->>!! não !!<<-- para sair.\n");
scanf("%s", &escolha);
criarLista(&p2_main);
do {
criar_registro(&p1_main); //poderia usar esta forma alternativa registro *novoRegistro = criar_registro()
insere_ini(&p2_main, p1_main);
}
while(escolha != "nao");
}