Douglas Lessing Postado Maio 5, 2010 Denunciar Share Postado Maio 5, 2010 Boa tarde Pessoal!Estou iniciando em C, e até agora vinha tirando minhas dúvidas no forum sem precisar perguntar.Agora estou com um problema e não consegui achar uma solução, então resolvi me cadastrar para ver se alguém me ajuda. Na hora de inserir o registro na minha lista, ocorre um erro e não consigo resolver. Se puderem me dar uma luz, fico extremamente agradecido!Abraço!#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define OK 0 #define ERRO 1 struct Agenda { int data,hora; char compromisso [100]; }; struct Elemento { struct Agenda* info; struct Elemento* prox; }; struct Lista { int qtde; struct Elemento* dados; }; int retornaHora(); int retornaData(); void retornaComp(struct Agenda* newcomp); void exibiLista(struct Lista *lista); struct Agenda *cadastro(); struct Lista *criaLista(); void adicionaLista(struct Lista *lista); int excluiComp(struct Lista* lista); struct Lista* pesqData(struct Lista* lista); main(){ struct Lista* lista; struct Elemento* cad; struct Agenda* novo; int op; lista=criaLista(); do{ printf("\n #######################################"); printf("\n ## ##"); printf("\n ## 1 - Cadastrar ##"); printf("\n ## 2 - Pesquisa por data ##"); printf("\n ## 3 - Listar agenda ##"); printf("\n ## 4 - Excluir item ##"); printf("\n ## 5 - Sair ##"); printf("\n ## ##"); printf("\n #######################################\n"); printf("\n\n OPCAO:"); scanf("%d", &op); switch(op){ case 1: {adicionaLista (lista);}break; case 2: {exibiLista(pesqData(lista));}break; case 3: {exibiLista (lista);}break; case 4: {excluiComp(lista);}break; } system ("cls"); if((op<1)||(op>5)) { printf("\aOpcao invalida - Escolha uma opcao valida\n"); } }while(op!=5); } struct Lista* criaLista() { struct Lista* listaNova; listaNova = (struct Lista*)malloc(sizeof(struct Lista)); listaNova->qtde = 0; listaNova->dados = NULL; return listaNova; } struct Agenda* cadastro(){ struct Agenda* newcomp; newcomp = (struct Agenda*)malloc(sizeof(struct Agenda)); newcomp->data=retornaData(); newcomp->hora=retornaHora(); fflush(stdin); retornaComp(newcomp); return newcomp; } void adicionaLista(struct Lista *lista){ struct Elemento* aux1; struct Elemento* aux2; struct Elemento* aux3; struct Elemento* novo; int x=0; novo= (struct Elemento*)malloc(sizeof(struct Elemento)); novo->info = cadastro(); if(lista->qtde == 1){ novo->prox=NULL; lista->dados=novo; } else{ if((lista->dados->info->data) > (novo->info->data)){ novo->prox=lista->dados; lista->dados=novo; x=1; } if((lista->qtde==2)&&(x==0)){ lista->dados->prox=novo; novo->prox=NULL; x=1; } if(x!=1){ aux1=lista->dados; aux2=lista->dados->prox; while( (aux2 != NULL) && ((aux2->info->data)<(novo->info->data))){ aux3 = aux1; aux1 = aux2; aux2 = aux2->prox; } aux3 = novo; novo->prox = aux1; } } } void exibiLista(struct Lista *exibilista){ if((exibilista==NULL)||(exibilista->qtde==0)){ printf("LISTA VAZIA!!\n"); getch(); } else { struct Elemento *p; for(p = exibilista->dados; p != NULL; p = p->prox){ printf("\nDATA: %d - HORA: %d", p->info->data, p->info->hora); printf("\nCOMPROMISSO: %s \n", p->info->compromisso); } getch(); } } int retornaHora(){ int hora,i; do{ printf("\nDigite a hora do compromisso (HHMM): "); scanf("%d",&hora); if( hora < 2360 & hora >= 0){ if( (hora % 100) < 60 ){ i=0; } } else { printf("\nHORA INVALIDA!!\n"); printf("DIGITE NOVAMENTE:\a\a\n"); i=1; } }while(i!=0); return hora; } int retornaData(){ int dia,mes,ano,data; printf("\nDigite a data do compromisso (DDMMAAAA): "); scanf("%d",&data); dia = data/1000000; mes = (data/10000)-(dia*100); ano = data%10000; return data; } void retornaComp(struct Agenda* newcomp){ printf("\nDigite o compromisso: "); gets(newcomp->compromisso); } int excluiComp(struct Lista* lista){ int data,hora; data=retornaData(); hora=retornaHora(); struct Elemento *p,*ant; ant=lista->dados; for(p = lista->dados; p != NULL; p = p->prox){ ant=p; if((p->info->data == data) && (p->info->hora == hora)){break;} } if(p == NULL)return ERRO; if(p->prox == NULL){ lista->qtde --; ant->prox= NULL; free(p); return OK; } if(ant == NULL){ lista->qtde --; lista->dados=p->prox; free(p); return OK; } if((p->prox != NULL)&&(ant != NULL)){ ant->prox=p->prox; lista->qtde --; free(p); return OK; } } struct Lista* pesqData(struct Lista* pesqlista){ struct Lista* sublista; struct Elemento* pesqnovo; struct Elemento* k; int data; sublista = (struct Lista*)malloc(sizeof(struct Lista)); sublista=criaLista(); data=retornaData(); for(k=pesqlista->dados;k!=NULL;k=k->prox){ if((k->info->data)==data){ pesqnovo = (struct Elemento*)malloc(sizeof(struct Elemento)); pesqnovo->info=k->info; pesqnovo->prox = sublista->dados; sublista->dados = pesqnovo; sublista->qtde ++; } } return sublista; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Maio 6, 2010 Denunciar Share Postado Maio 6, 2010 Qual exatamente o erro?!Só lembrando que para alterar o valor de uma variável dentro de uma função você precisa passar ela por referência! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Douglas Lessing
Boa tarde Pessoal!
Estou iniciando em C, e até agora vinha tirando minhas dúvidas no forum sem precisar perguntar.
Agora estou com um problema e não consegui achar uma solução, então resolvi me cadastrar para ver se alguém me ajuda.
Na hora de inserir o registro na minha lista, ocorre um erro e não consigo resolver.
Se puderem me dar uma luz, fico extremamente agradecido!
Abraço!
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.