1
I’m having trouble printing out the values on my list. I believe the function is right, however the following error is happening when I try to compile: "error: expect declaration specifiers or .. before & token".
I believe there is an error in the function parameterization. I am using the address of the list struct, but it is not working.
I ask for an explanation of the problem and the solution.
The problem happens in the
main() {
...
...
imprime_valores(&p2_main);
}
Complete code
#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_st * 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){
l->cauda = NULL;
l->cabeca = NULL;
l->tamanho = 0;
}
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
printf("nodo implementado!!");
return novo;
}
//FUNÇÕES PARA UTILIZAR NO MAIN
void imprime_nomes(lista *l){ // função que imprime os valores
nodo *p = l->cauda; // Usando while, não é necessário estabelecer um loop para percorrer toda lista.
while(p)
{
printf("Nome eh: %s\n", p->dado->nome);
p = p->prox;
}
}
void criar_registro(registro *p){ //função para adicionar os contatos
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;
int escolha1, escolha2;
criarLista(&p2_main); //cria a lista para salvar os nodos.
do {
printf("Digite 1 para continuar:\n");
scanf("%d", &escolha1);
criar_registro(&p1_main);
insere_ini(&p2_main, &p1_main);
}
while ( escolha1 != 0);
}
imprime_nomes(&p2_main);
Perfect! I have made the changes and is partially working the program. When it prints the values I have recorded, they appear in sequence of the number of records performed, but only the last name. Nodes are being correctly innervated in the list, but something is still missing...
– Arduin