Print of Chained List values - Problem with pointers (C language)

1

I'm having trouble printing the values in my list. I believe the function is right, however the following error is occurring when I try to compile: "error: expect declaration specifiers or '...' before '&" token ".

I believe there is an error in the parameterization of the function. I am using the address of the struct list, but it is not working.

I ask for an explanation of the problem and the solution.

The problem happens in

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);
    
asked by anonymous 22.07.2017 / 06:30

1 answer

0

The imprime_nomes call is out of main . main should look more like:

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);
}

It also has two more errors.

  • p2_main is a pointer, but you have never given a value to p2_main before using within criarLista .

  • criarLista expects a lista* , that is, a pointer to a lista , but you passed &p2_main , the p2_main address. This address has the type of lista** , or a pointer to a pointer to a lista .

  • It seems like the same errors apply to p1_main . You can correct both errors by changing the lines:

    registro *p1_main;
    lista *p2_main;
    

    with:

    registro p1_main;
    lista p2_main;
    
        
    22.07.2017 / 07:18