[Ajuda] Erro ao tentar imprimir de vetor de struct em C
Bom, no meu código ao acessar um vetor de struct declarado globalmente e inicializado no main eu tento passar valores para ele e tento imprimir e nem chega a esse ponto. Antes de eu fazer isso fiz um vetor de struct no int main, inicializei lá, passei para a função, mas ao imprimir não mostrava nada.
Cheguei ao ponto de pensar em retornar a struct para a struct do int main, mas como são as mesmas fiquei parado e peço a ajuda de vocês se poderem apontar erros ou qualquer coisa no código a baixo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define tamanho 3
typedef struct nomes vetnome;
typedef struct letras letra;struct nomes{
char nome[30];
vetnome *pont;
};
struct letras{
char L[4];
vetnome *pontpnome;
};
void inserir (vetnome **nom);
int chave(char nome2[30]);
void imprimir();
letra tabEsp[tamanho];int main()
{
int qtd=1,i=0,contd=0;
int chaveres=0;
char nome[30], resposta[30];
for(contd=0;contd<3;contd++)
{
strcpy(tabEsp[contd].L,"NULL");
}
while(qtd<4)
{
printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: ");
vetnome *nom=(vetnome *)malloc(sizeof(vetnome));
inserir(&nom);
system("pause");
system("cls");
qtd++;
}
puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)");
while((strcmp(strupr(resposta),"NAO"))!=0)
{
vetnome *nom=(vetnome *)malloc(sizeof(vetnome));
inserir(&nom);
printf("Você quer continuar?[Sim/Nao]");
scanf("%s", &resposta);
system("pause");
system("cls");
}
imprimir();
return 0;
}
int chave(char nome2[30])
{
unsigned int resultado= (int)nome2[0]%tamanho;
if(resultado<0)
resultado=-resultado;
return resultado;
}
void inserir (vetnome **nom)
{
char nome[30], nome2[30];
puts("Digite um nome: ");
scanf("%s", &nome);
strcpy(nome2,strupr(nome));
int chaveres=chave(nome2);
vetnome *aux2;
aux2=nom;
if(chaveres==1)
{
if(strcmp(tabEsp[chaveres].L,"NULL")==0)
{
strncpy(tabEsp[chaveres].L,nome,1);
aux2->pont=NULL;
tabEsp[chaveres].pontpnome=aux2;
return;
} else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0))
{
aux2=tabEsp[chaveres].pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strncpy(name->nome,nome,30);
aux2=name;
aux2->pont=NULL;
return;
}
}
if(chaveres==2)
{
if (strcmp(tabEsp[chaveres].L,"NULL")==0)
{
strncpy(tabEsp[chaveres].L,nome,1);
aux2->pont=NULL;
tabEsp[chaveres].pontpnome=aux2;
return;
} else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0))
{
aux2=tabEsp[chaveres].pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strncpy(name->nome,nome,30);
aux2=name;
aux2->pont=NULL;
return;
}
}
if(chaveres==3)
{
if (strcmp(tabEsp[chaveres].L,"NULL")==0)
{
strncpy(tabEsp[chaveres].L,nome,1);
aux2->pont=NULL;
tabEsp[chaveres].pontpnome=aux2;
return;
} else if((strcmp(tabEsp[chaveres].L,"NULL")>0) || (strcmp(tabEsp[chaveres].L,"NULL")<0))
{
aux2=tabEsp[chaveres].pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strncpy(name->nome,nome,30);
aux2=name;
aux2->pont=NULL;
return;
}
}
if (chaveres>3)
{
puts("Espaço não reservado!");
}
}
void imprimir()
{
int num=0,qtd=0;
puts("Digite qual opção deseja: \n");
puts("[ 0 ] TUDO \n");
puts("[ 1 ] APENAS UMA DAS LISTAS DE LETRAS \n");
puts("[ 2 ] Sair \n");
scanf(" %d", &num);
if(num==0)
{
vetnome *aux2;
for(qtd=0;qtd<4;qtd++)
{
printf("Primeira Letra -> %c \n", tabEsp[qtd].L[0]);
aux2=tabEsp[qtd].pontpnome;
while(aux2!=NULL)
{
printf("Nome -> ", aux2->nome,"\n");
aux2=aux2->pont;
}
}
}
system("pause");
}Discussão (0)
Carregando comentários...