PCaseiro Posted April 29, 2015 at 03:39 PM Report Share #582130 Posted April 29, 2015 at 03:39 PM (edited) Boas malta, tenho uma lista ligada em que cada nó tem o nome, bi data e hora de admissao de um doente, e o que quero fazer é atribuir a cada doente da lista uma cor e coloca-lo numa lista ligada conforme a cor atribuida. typedef struct infor{ int dia,mes,ano,hora,minutos; char *bi; char nome[MAX]; }Infor; typedef struct pnode *paciente; typedef struct pnode{ Infor *informacao; paciente next; }pnode; typedef struct cnode *consulta; /*pergunta ao prof se esta e preciso e se nao basta pelo bi ir buscar a informacao a lista de triagem onde esta a informacao do doente */ typedef struct cnode{ char * pulseira; Infor *informacao; consulta next; /*char nome[MAX]; Data *info_data; paciente next;*/ }cnode; consulta cria_lista_consulta(){ consulta lista; lista=(consulta)malloc(sizeof(cnode)); if(lista!=NULL){ lista->next=NULL; } return lista; } void imprime_lista_consulta(consulta lista){ consulta l = lista->next; /* Salta o header */ while (l){ printf("Paciente: %s BI: %s\n Pulseira: %s",l->informacao->nome,l->informacao->bi, l->pulseira); printf("Data: %d/%d/%d \t Horas: %.2d:%.2d", l->informacao->dia,l->informacao->mes,l->informacao->ano,l->informacao->hora,l->informacao->minutos); printf("\n"); printf("\n"); printf("\n"); l=l->next; } } void atribuir_pulseira(paciente triagem, consulta vermelha, consulta amarela, consulta verde){ char prioridade[MAX]; paciente aux; aux = triagem; if(aux->next != NULL){ printf("Qual a prioridade que quer atribuir ao doente: %s com bi: %s\n", (aux->next->informacao->nome), aux->next->informacao->bi); fgets(prioridade, MAX, stdin); } else{ printf("Não há doentes em espera para triagem!\n"); } /* NÃO PODEMOS USAR SWITCH COM STRINGS EM C */ if(strcmp(prioridade,"vermelha") == 0){ insere_vermelha(triagem, vermelha, prioridade); } } void insere_vermelha(paciente triagem, consulta vermelha, char prioridade[]){ paciente aux; aux = triagem; consulta no = (consulta)malloc(sizeof(cnode)); no->informacao = (Infor*)malloc(sizeof(Infor)); no->pulseira = (char*)malloc(sizeof(char)); if(no!=NULL){ strcpy(no->pulseira, prioridade); strcpy(no->informacao->bi, aux->next->informacao->bi); strcpy(no->informacao->nome, aux->next->informacao->nome); no->informacao->dia = aux->next->informacao->dia; no->informacao->mes = aux->next->informacao->mes; no->informacao->ano = aux->next->informacao->ano; no->informacao->hora = aux->next->informacao->hora; no->informacao->minutos = aux->next->informacao->minutos; while(vermelha->next!=NULL){ vermelha = vermelha->next; } no->next=NULL; vermelha->next = no; } else{ printf("ERRO!"); } } O meu problema é ele não estar a copiar nada para a lista chamada vermelha. Edited April 29, 2015 at 03:43 PM by thoga31 GeSHi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 29, 2015 at 03:42 PM Report Share #582131 Posted April 29, 2015 at 03:42 PM 1- sê mais claro no que pretendes fazer 2- sê mais claro no que já fizeste e não conseguiste 3- sê mais claro que parte desse código horrivelmente mal indentado, a parte que realmente interessa IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
PCaseiro Posted April 29, 2015 at 04:11 PM Author Report Share #582132 Posted April 29, 2015 at 04:11 PM O resultado final é um serviço de urgências. O que já tenho a funcionar é a parte em que na lista chamada triagem vamos inserindo pacientes, dando o seu nome, bi, dia e hora de entrada. O que quero agora é atribuir a cada um desses pacientes uma pulseira (chamado método de triagem de manchester) e para isso criei 3 listas ligadas onde vou por os doentes conforme a cor que lhes atribuir. O meu erro está ao passar a informação de cada nó da triagem para um nó que vou juntar à lista da cor respetiva (neste caso está só para vermelhas). Ele não me parece estar a passar nenhuma informação da lista triagem para o nó que adiciono à lista vermelha Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 29, 2015 at 04:21 PM Report Share #582133 Posted April 29, 2015 at 04:21 PM nota : não vou comentar nenhum dos problemas, más práticas ou simplesmente má implementação que não seja o problema referido no tópico para detectares qual o problema, faz este teste: // ... fgets(prioridade, MAX, stdin); // <-- ler a prioridade do tectlado // ... printf("prioridade lida do teclado |%s|\n", prioridade); <--- toma atenção aos caracteres '|' para veres onde começa e acaba a string !!! if(strcmp(prioridade,"vermelha") == 0) { // ... } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
PCaseiro Posted April 29, 2015 at 04:28 PM Author Report Share #582134 Posted April 29, 2015 at 04:28 PM Já agora, quais são as más práticas e a má implementação? Fiquei curioso. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 29, 2015 at 04:35 PM Report Share #582135 Posted April 29, 2015 at 04:35 PM - malloc desnecessários devido a uma má implementação da estrutura de dados - falta de verificação de sucesso de chamadas das funções - processos realizados antes de verificações - poluição através de typedef desnecessários - etc ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now