I'm having trouble printing the names I'm registering in this program.
I'm inserting elements into a record: login, name, and values. Each new element is inserted in a chained list .
For example, if I made three distinct records like Victor, Mayko and Itamar the program appears as follows:
Name eh Itamar.
Name eh Itamar.
Name is Itamar.
I believe there is an error in this code:
void imprime_nomes(lista *l){ // função que imprime os valores
nodo* p = l->cauda;
while(p)
{ // Usando while, não é necessário estabelecer um loop para percorrer toda lista.
printf("Login eh: %s\n", p->dado->login);
printf("Nome eh: %s\n", p->dado->nome);
p = p->dir;
}
}
Follow the complete code:
<stdlib.h>
#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 *dir;
struct nodo_st *esq;
} 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->dir = NULL;
n->esq = 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->dir = l->cauda; //antigo primeiro aponta para o próximo
l->cauda = novo; // novo nodo recebe ponteiro para começo
l->tamanho = l->tamanho + 1;
printf("\n\nEsse foi o registro de num: %d.\n", l->tamanho);
printf("\nnodo implementado!!\n");
return novo;
}
}
//FUNÇÕES PARA UTILIZAR NO MAIN
void imprime_nomes(lista *l){ // função que imprime os valores
nodo* p = l->cauda;
while(p)
{ // Usando while, não é necessário estabelecer um loop para percorrer toda lista.
printf("Login eh: %s\n", p->dado->login);
printf("Nome eh: %s\n", p->dado->nome);
p = p->dir;
}
}
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 = 99, escolha2;
criarLista(&p2_main); //cria a lista para salvar os nodos.
do {
printf("Qual opção a seguir você deseja realizar?\n\n1-Adicionar Contato\n2-Apresentar nomes registrados\n\n");
scanf("%d", &escolha1);
switch(escolha1){
case 1:
criar_registro(&p1_main);
insere_ini(&p2_main, &p1_main);
break;
case 2:
imprime_nomes(&p2_main);
}
}
while ( escolha1 != 0);
return 0;
}