Pesquisar na Comunidade
Mostrando resultados para as tags ''aprendendo''.
Encontrado 1 registro
-
[Ajuda] Erro ao tentar imprimir de vetor de struct em C
Gui2000 postou uma questão Perguntas e respostas rápidas
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"); }