View Full Version : ajuda em c++(urgente)


wallydosantos
29-05-2007, 23:37
boas...
estou a fazer um trabalho em c++, estou a fazer uma função de inserir / remover elementos de uma lista. ela insere/remove so que nao guarda..
gostava de saber como faço uma função pra guardar os elementos que insiro e removo..
insiro elementos deste tipo:1;Ricardo Gomes Silva;Avenida dos Combatentes,1200 Lisboa;140567000...
utilizo uma estrutura do tipo cliente:


typedef struct cliente{
long int num;
char nome[max];
char morada[max];
long int n_c;
}cliente;

e aqui estao as funções de remover e inserir :

void removenode(LIST * lista,void * ptr_data)
{
LIST_NODE * node, * ant;
BOOLEAN find=FALSE;
node=*lista;
while(node!=NULL && find==FALSE)
{
if(DATA(node)==ptr_data)
{
if(node==*lista)
{
*lista=NEXT(node);
free(node);
}
else
{
NEXT(ant)=NEXT(node);
free(node);
}
find=TRUE;
}
else
{
ant=node;
node=NEXT(node);
}
}
return;
}

muddymind
30-05-2007, 02:37
epa, edita o post e poe indentação nisso q assim não se le nada...

[]

ps- tens mesmo umas ferramentas para indentar no editor de posts

S.T.E.E.L.
30-05-2007, 03:10
Mas queres gravar isso num ficheiro, suponho?

Se sim, precisas das funções

fopen(...)
fwrite(...)
fclose(...)
fread(...)

Já não me lembro é da síntaxe do fwrite() e fread(), mas no google tudo se encontra... :D

Myth
30-05-2007, 09:08
Boas,

Dizes que estás a fazer o trabalho em C++, mas o código está em C. Se queres fazer em C++, deves usar Classes e aproveitar os beneficios das librarias STD. Com a STD, não precisas de andar a fazer funções manhosas de manipulação de listas. ;)

Para guardar em C usas tipo

FILE* fp = fopen("dados.txt","r+");
fprintf(fp, "%d;%s;%s;%d\n",var1, var2, var3, var4 );
fclose(fp);

para c++ usas algo do gen:

ofstream dados("dados.txt", ios::out);
dados << var1 << ";" << var1 << ";" << var1 << ";" << var1 << "\n";

hYpe
30-05-2007, 13:03
void removenode(LIST * lista,void * ptr_data)

LIST_NODE * node...

node=*lista;

Eu já implementei coisas do género, tambem em c++, parecido com o q estas a fazer... Mas lembro-me de fazer
node = *lista.getCabeca();

De salientar que o meu objecto lista, era de uma classe criada por mim.

Cumps

MX+
02-06-2007, 16:37
Embora isto esteja programado em C, esta é a solução para o problema:

void removenode(LIST ** lista, void * ptr_data)
{
if ( *lista == NULL ) {
}
else
if ( DATA(*lista) = ptr_data ) {
*lista = NEXT(lista);
}
else {
LIST_NODE *node = *lista;

while( NEXT(node) != NULL && DATA(NEXT(node)) != ptr_data )
node = NEXT(node);

if ( NEXT(node) != NULL ) {
NEXT(node) = NEXT(NEXT(node));
}
}
}
Só um pormenor. Tens de passar o endereço do apontador da lista, porque o que queres remover pode ser o primeiro item da lista e assim tens de alterar o endereço do apontador da lista.

removenode( &lista, ... );

Jeust
04-06-2007, 02:02
typedef struct cliente{
long int num;
char nome[max];
char morada[max];
long int n_c;
}cliente;


como é k estás a implementar a lista?

pk só com esta função só te guarda os dados de um cliente... tens de ter uma variavel k te faça a transição para o próximo elemento da lista, entre outras coisas...

MX+
04-06-2007, 02:36
Realmente esse pormenor escapou-me >_<
É um bocado fundamental : D

wallydosantos conta ai como te estás a safar.