Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PCaseiro

Cópia de informação de nó para nó

Mensagens Recomendadas

PCaseiro

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.

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCaseiro

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

- 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.