• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nitrous

listas ligadas

9 mensagens neste tópico

Boas,

estou com 1 pequeno problema num projecto que estou a fazer. Ja tentei fazer de varias maneiras mas sem sucesso :down:

Eis o codigo:

fichaCurso.h

#ifndef FICHACURSO_H
#define FICHACURSO_H
#define MAX_NOME 100
#define MAX_DESCRICAO 300

typedef struct 
{
    char nomeCurso[MAX_NOME+1];
    char descricaoCurso[MAX_DESCRICAO+1];
    unsigned short cicloCurso;
} TFichaCurso;

void inserirCurso(TFichaCurso *pcurso);
void listarCurso(TFichaCurso curso);
#endif

fichaCurso.c

#include <stdio.h>
#include "fichaCurso.h"

void inserirCurso(TFichaCurso *pcurso)
{
     leString(pcurso->nomeCurso, "Nome do curso: ", MAX_NOME);
     leString(pcurso->descricaoCurso, "Descricao: ", MAX_DESCRICAO);
     pcurso->cicloCurso = leUnsigned("Ciclo: ");
}

void listarCurso(TFichaCurso curso)
{
    printf("Curso: %s\n" ,curso.nomeCurso);
    printf("Descricao: %s\n", curso.descricaoCurso);
    printf("Ciclo: %hu\n", curso.cicloCurso);     
}

O que pretendo e uma funçao para percorrer e listar todo o conteudo da struct. Por ex. ter 1 curso com o nome "LEI" e com a descriçao "teste1" e ciclo "1". e outro com o nome "LIG" e com a descricao "teste2" e ciclo "2".

E apos a listagem ficar deste genero no monitor:

Curso: LEI

Descricao: teste1

Ciclo: 1

Curso: LIG

Descricao: teste2

Ciclo: 2

Ex. funcao:

void escreveCDs(TCD cds[], unsigned numCDs, TTipoMusica tipo)
{
     unsigned i;
     for (i=0; i<numCDs;i++)
         if (cds[i].tipo == tipo)
            escreveCD(cds[i]);
}

(se possivel ter algo que indicasse o nº do curso.. do tipo Curso 1: etc..)

Pegando no ex. anterior:

------------------

Curso 1: LEI

Descricao: teste1

Ciclo: 1

Curso 2: LIG

Descricao: teste2

Ciclo: 2

------------------

nao sei se me fiz entender bem  :D

Obrigado pela atençao.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, não entendi :s. Não é precisamente isso que o eu código já faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao. ele de momento so recebe os dados e guarda-os na struct com a funçao inserirCurso. A funçao listarCurso o que faz é listar os dados que a struct contem do "elemento" que recebe como parametro.

O que falta é uma funçao que percorra a struct enquanto esta tiver "elementos" e chame a funçao listarCurso com o indice desse mesmo "elemento".

Nao sei se me fiz perceber agora  :D

Obrigado pela atençao.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto é um problema de listas ligadas e não de structs, aconselho-te a mudares o título do tópico para reflectir isso (e de preferência algo mais descritivo sobre o problema), és capaz de ter mais sorte nas respostas se souberes ajudar-te a ti próprio.

Há uns tempos fiz o seguinte "tutorial" que tem exactamente o que precisas (mais lá para o fim):

http://wiki.nazgulled.net/playground/pi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Topico principal modificado. Espero que agora percebam o meu problema :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já viste o link que o Nazgulled meteu ali? Se aquilo não é acertar na mouche no que precisas, não sei o que será.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim ja vi e segui o tutorial. Funcionou tudo na perfeiçao menos o listar.

Onde obtive apenas:

Curso: (null)

Para inserir os dados usei o seguinte:

inteiros = inserirCurso(inteiros);

E para os listar:

listarCursos(inteiros);

(visto que em ambos os casos as funcoes recebem 1 parametro do tipo Lista com o nome iLista)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que é mais importante para que te possam ajudar é todo o código da função listarCursos e não a forma como a chamas...

Mas repara que no meu exemplo, o tipo Lista é um apontador para a estrutura e segundo a assinatura (se for essa que estás a usar) que tens no primeiro post deste tópico, isso nunca iria funcionar porque tu estás a querer passar a própria estrutura e não o apontador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim. Peço desculpa por nao ter sido muito especifico.

Ja consegui resolver o problema.

Apos muitas voltas no codigo.. reparei que me tinha esquecido de modificar listarCurso para listarCursos :-[

Obrigado pela ajuda de todos. ;)

0

Partilhar esta mensagem


Link 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