N a T a N Postado Abril 21, 2011 Denunciar Share Postado Abril 21, 2011 (editado) Minha Lista tem apresentado alguns problemas, e estou ficando com algumas dúvidas na passagem de parametros, e ela está com erro na hora de imprimir.Arquivos .h// agenda.h #include <string.h> #include <stdio.h> #include <stdlib.h> #include "Compromisso.h" struct agenda{ int idAgend; int identProf; char nomeProfer[MAX]; int ano; Compromisso *c; struct agenda *prox; }; typedef struct agenda Agenda; Agenda * criaAgenda(Agenda *a, int idProf, char *name, int ano); Agenda * insereCompromisso(Agenda *a,char *tip,char *name,Data *dat, int hor, int durac); Agenda * novoAgenda(Agenda *a,Compromisso *comp); void imprimeAgenda(Agenda *a); /* ------------------------------------------------------------------------------------------------------------------------------ */ //Compromisso.h #define MAX 100 enum boolean { true=1,false=0 }; typedef enum boolean bool; enum Status { A_SER_CUMPRIDO=1, ADIADO=2, CANCELADO=3 }; typedef enum Status stats; typedef struct{ int dia; int mes; int ano; }Data; typedef struct{ char tipo[MAX]; char nome[MAX]; Data data; int hora; int duracao; int prioridade; stats status; bool adiavel; int identificador; } Compromisso; int inicializaCompromisso(Compromisso *c,char *tip,char *name,Data *dat,int hor, int durac); void alteraPrioridade(Compromisso *c,int priorid); int retornaPrioridade(Compromisso *c); bool eAdiavel(Compromisso *c); bool temConflito(Compromisso *c1, Compromisso *c2); void atribuiStatus(Compromisso *c,stats status1); void imprimeCompromisso(Compromisso *c); Arquivos .c //Compromisso.c #include "agenda.h" int i=0; int inicializaCompromisso(Compromisso*c,char *tip,char *name,Data *dat, int hor, int durac){ c->identificador=++i; c->hora=hor; c->duracao=durac; if(strcmp("Aula",tip)==0) c->prioridade=2; else if(strcmp("Orientacao",tip)==0) c->prioridade=1; else if(strcmp("Reuniao",tip)==0) c->prioridade=4; else if(strcmp("Evento",tip)==0) c->prioridade=3; else if(strcmp("Compromisso Particular",tip)==0) c->prioridade=2; strcpy(c->tipo,tip); strcpy(c->nome,name); c->status=A_SER_CUMPRIDO; c->adiavel=false; c->data.dia=dat->dia; c->data.mes=dat->mes; c->data.ano=dat->ano; return c->identificador; } void alteraPrioridade(Compromisso *c,int priorid){ c->prioridade=priorid; } int retornaPrioridade(Compromisso *c){ return c->prioridade; } bool eAdiavel(Compromisso *c){ if(c->tipo=="Aula" || c->tipo == "Evento") return false; else return true; } bool temConflito(Compromisso *c1, Compromisso *c2){//Já testada. if((c1->data.dia==c2->data.dia)&&(c1->data.mes==c2->data.mes)&&(c1->data.ano==c2->data.ano) && (c1->hora==c2->hora)) return true; else return false; } void atribuiStatus(Compromisso *c,stats status1){ c->status=status1; } stats retornaStatus(Compromisso *c){ return c->status; } void imprimeCompromisso(Compromisso *c){ printf("Identificador: %d\n",c->identificador); printf("Tipo: %s\n",c->tipo); printf("Data: %d/%d/%d\n",c->data.dia,c->data.mes,c->data.ano); printf("Hora: %d:00\n",c->hora); if(strcmp(c->tipo,"Evento")==0) printf("Duracao: %d\n",c->duracao); else{ printf("Duracao: %d\n",c->duracao); } if(strcmp("Aula",c->tipo)==0) printf("Nome da Disciplina: %s\n",c->nome); else if(strcmp("Orientacao",c->tipo)==0) printf("Nome do Aluno: %s\n",c->nome); else if(strcmp("Reuniao",c->tipo)==0) printf("Nome da Reuniao: %s\n",c->nome); else if(strcmp("Evento",c->tipo)==0) printf("Nome do Evento: %s\n",c->nome); else if(strcmp("Compromisso Particular",c->nome)==0) printf("Motivo: %s\n",c->nome); if(c->status==A_SER_CUMPRIDO) printf("A Ser Cumprido\n"); else if(c->status==ADIADO) printf("Adiado\n"); else if(c->status==CANCELADO) printf("Cancelado\n"); if(c->adiavel==true) printf("Pode ser adiado\n"); if(c->adiavel==false) printf("não pode ser adiado\n"); } /* --------------------------------------------------------------------------------------------------------------------------------------------------- */ //agenda.c #include "agenda.h" static int idenAgend=1; Agenda * criaAgenda(Agenda *a, int idProf, char *name, int ano){ a=(Agenda *)malloc(sizeof(Agenda)); a->identProf=idProf; strcpy(a->nomeProfer,name); a->ano=ano; a->idAgend=idenAgend; a->prox=NULL; idenAgend++; return a; } Agenda * novoAgenda(Agenda *a,Compromisso *comp){ Agenda *novo=(Agenda*)malloc(sizeof(Agenda)); novo->c=comp; novo->prox=a; return novo; } Agenda * insereCompromisso(Agenda *a,char *tip,char *name,Data *dat, int hor, int durac){ int x=inicializaCompromisso(&(a->c),tip,name,dat,hor,durac); Agenda *b=novoAgenda(a,(a->c)); return b; } void imprimeAgenda(Agenda *a){ Agenda *z; printf("Id Agenda: %d\n",a->idAgend); printf("ID Professor: %d\n",a->identProf); printf("Nome do Professor: %d\n",a->nomeProfer); printf("Ano: %d\n",a->ano); printf("\n"); for(z=a;z->prox!=NULL;z=z->prox){ imprimeCompromisso(&(z->c)); getch(); printf("\n"); } } [/quote]E a main. [quote] #include "agenda.h" int main(){ bool g; int a,b,cd; char name[]="Natan Avila"; char nameEvent[]="Cervejada"; char nameEvent2[]="Calourada"; char nameEvent3[]="Trote"; Data *dat; dat->dia=29; dat->mes=01; dat->ano=2010; char tip[]="Evento"; char tip2[]="Orientacao"; char tip3[]="Compromisso Particular"; Agenda *k=criaAgenda(k, 2626, name, 2011); k=insereCompromisso(k,tip,nameEvent,dat,06,50); imprimeAgenda(k); k=insereCompromisso(k,tip2,nameEvent2,dat,02,40); imprimeAgenda(k); k=insereCompromisso(k,tip3,nameEvent3,dat,16,60); imprimeAgenda(k); imprimeAgenda(k); system("pause"); free(k); return 0; }Como podem ver, o código apresenta erros durante a compilação, e não consigo resolver, principalmente na função de imprimir...Se alguém souber alguma possível solução, ou informar o que está errado, eu agradeceria :D Editado Abril 21, 2011 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Myho Postado Abril 23, 2011 Denunciar Share Postado Abril 23, 2011 Desculpe, mas está dificil dar suporte a esse código. Fica muito dificil a leitura quando os nomes de variaveis não são auto-explicativas.É uma minoria de variaveis, mas atrapalham demais na hora da leitura. Mesmo que sejam variaveis temporarias deve-se dar nomes melhores que a, k, c, z...Excluindo os laços de repetição, quando usamos um i, j ou k como contadores por exemplo.Mas eu até consegui fazer o código compilar, foi só retirar alguns '&' que não precisavam estar por la. Se numa função você espera receber, por exemplovoid function(Agenda *agenda) { } e sua agenda já foi declarada como um ponteiro Agenda *agenda2011; Então na passagem de parametros para função é só passar ela direto, sem o &. function(agenda2011);Após corrigidos esses erros o programa compilou, mas apareceram os problemas de lógica, alguns ponteiros são chamados sem terem sido alocados entre outros. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
N a T a N
Minha Lista tem apresentado alguns problemas, e estou ficando com algumas dúvidas na passagem de parametros, e ela está com erro na hora de imprimir.
Arquivos .h
Arquivos .cComo podem ver, o código apresenta erros durante a compilação, e não consigo resolver, principalmente na função de imprimir...
Se alguém souber alguma possível solução, ou informar o que está errado, eu agradeceria :D
Editado por kuroiAdicionar tag CODE
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.