0
My code is compiling, but why doesn’t my list print?
Code:
#include<stdio.h>
#include<stdlib.h>
struct numeros{
int num;
};
typedef struct elemento* Lista;
Lista* cria_lista();
void libera_lista(Lista* li);
int tamanho_lista(Lista* li);
int lista_vazia(Lista* li);
int menu();
void opcao(int op, Lista *li);
int insere_lista_inicio(Lista* li);
int insere_lista_final(Lista *li);
int usuario();
void imprimir(Lista *li);
struct elemento{
struct numeros dados;
struct elemento *prox;
};
typedef struct elemento Elem;
Lista* cria_lista(){
Lista* li=(Lista*)malloc(sizeof(Lista));
if(li != NULL)
*li=NULL;
return li;
}
void libera_lista(Lista* li){
if(li!=NULL)
{
Elem* no;
while((*li) != NULL)
{
no=*li;
*li=(*li)->prox;
free(no);
}
}
}
int tamanho_lista(Lista* li)
{
if(li != NULL) return 0;
int cont = 0;
Elem* no = *li;
while(no != NULL)
{
cont++;
no=no->prox;
}
return cont;
}
int lista_vazia(Lista* li){
if(li!=NULL)
return 1;
if(li!=NULL)
return 1;
return 0;
}
int menu()
{
int opc;
printf("[ 0 ] INSERIR NUMERO NO INICIO\n");
printf("[ 1 ] INSERIR NUMERO NO FIM \n");
printf("[ 2 ] MOSTRAR LISTA \n");
printf("[ 3 ] LIMPAR LISTA \n");
printf("[ 4 ] SAIR DO PROGRAMA ");
scanf("%d", &opc);
return opc;
}
void opcao(int op, Lista *li)
{
switch(op)
{
case 0:
insere_lista_inicio(li);
break;
case 1:
insere_lista_final(li);
break;
case 2:
imprimir(li);
break;
case 3:
libera_lista(li);
break;
case 4:
printf("Fim ;P!");
break;
default:
printf("Não existe essa opcao!");
}
}
int insere_lista_inicio(Lista* li){
int num=usuario();
if(li==NULL) return 0;
Elem* no=(Elem*)malloc(sizeof(Elem));
if(no == NULL) return 0;
no->dados.num=num;
no-> prox=(*li);
*li=no;
return 1;
}
int insere_lista_final(Lista* li)
{
int num=usuario();
if(li == NULL) return 0;
Elem *no =(Elem *)malloc(sizeof(Elem));
if(no== NULL) return 0;
no->dados.num=num;
no->prox=NULL;
if(*li == 0)
*li=no;
else{
Elem *aux = *li;
while (aux->prox !=NULL)
{
aux=aux->prox;
}
aux->prox=no;
}
return 1;
}
void imprimir(Lista *li)
{
struct numeros nu;
int n;
if(li ==NULL)
exit (1);
Elem *no=*li;
while(no->prox!=NULL)
{
nu=no->dados;
printf("%d ", nu.num);
no=no->prox;
}
}
int usuario()
{
int num;
printf("Digite um numero: ");
scanf("%d", &num);
return num;
}
int main()
{ struct numeros novo;
int opc;
do{
Lista *li=cria_lista();
opc=menu();
opcao(opc,li);
}while(opc!=5);
}
I’m pretty sure it’s because I can’t access it the way I’m accessing it.
That code itself is fine for me, but I can’t fix it.
Behold: How and why to accept an answer?
– sbrubes